是否可以调用显式指定模板参数的模板化强制转换运算符?

WF

考虑以下代码:

#include <string>
#include <sstream>

template <class T>
struct converter_impl {
   std::string to_convert;
   operator T() {
      T result;
      std::stringstream ss(to_convert);
      ss >> result;
      return result;
   }
};

struct converter {
   std::string to_convert;
   template <class T, class CI = converter_impl<T>>
   operator T() {
      CI ci = CI{std::move(to_convert)};
      return ci;
   }
};

converter from_string(std::string s) {
   return converter{std::move(s)};
}

现在,我可以使用from_string如下功能:

string s = "123";
int x = from_string(s);
cout << x << endl;

我只是好奇是否有一种方法可以调用converter显式指定模板参数struct的强制转换运算符语法:

from_string(s).operator int<int, converter_impl<int>>();

不起作用...

用户名

您可以调用强制转换运算符,因为它没有模板化:

int x = from_string(s).operator int();

或像这样

int x = from_string(s).template operator int();

作为明确指定第二个模板参数的解决方法:

struct converter {
    std::string to_convert;
    template <class T, class CI >
    operator T() {
        CI ci = CI{std::move(to_convert)};
        return ci;
    }

    template <class T, class CI>
    T cast()
    {
        CI ci = CI{std::move(to_convert)};
        return ci;
    }
};

并像这样使用它:

auto y = from_string(s).cast<int, converter_impl<int> >();

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何显式调用运算符<<的模板重载?

模板化的重载运算符分辨率,无隐式强制转换

从模板化基类取消隐藏模板化强制转换运算符

模板化类型转换运算符=

显式模板转换运算符上的enable_if给出“无效的static_cast”

显式转换运算符模板的优先级和歧义性

什么时候可以不使用强制转换而使用显式运算符bool?

是否可以在函数模板的显式专业化中扣除多个模板参数?

T为QPointF时的模板强制转换运算符

是否可以在没有显式专门化的情况下调用可变参数模板函数?

运算符==()的模板类的隐式转换

模板推导与隐式用户定义转换运算符

gcc和clang在运算符重载解析期间隐式实例化模板参数

是否可以仅对尚未指定该行为的类型限制模板运算符?

是否可以在传递给函数的泛型 lambda 中显式指定模板参数?

转换运算符的模板参数类型推导

当重载`std :: ostream`运算符时,是否可以更改默认非类型模板参数?

为什么用户定义的模板化转换运算符可以确定其返回类型?

显式转换运算符bool

模板化转换运算符string()无法编译

模板化转换运算符优先级

模板化转换运算符的重载解析

是否可以调用具有显式特化的模板化 lambda?

Visual C ++-显式类型上的显式调用转换运算符

C++ 模板、类型名和运算符<<:错误:未定义函数模板“operator<<”的显式实例化

如何使模板函数(运算符)隐式推导模板参数?

函数调用运算符的C ++模板

如何调用模板运算符?

模板转换运算符问题