Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 可以显式地指定模板参数来调用templated cast操作符吗?_C++_Templates_C++11_Operator Overloading - Fatal编程技术网

C++ 可以显式地指定模板参数来调用templated cast操作符吗?

C++ 可以显式地指定模板参数来调用templated cast操作符吗?,c++,templates,c++11,operator-overloading,C++,Templates,C++11,Operator Overloading,以代码为例: #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 resu

以代码为例:

#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)};
}
我只是好奇是否有一种方法可以调用
converter
struct的cast操作符来显式指定模板参数。语法:

from_string(s).operator int<int, converter_impl<int>>();
来自_字符串。运算符int();

无法工作…

您可以调用cast操作符,因为它未模板化:

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;
    }
};
struct转换器{
std::字符串到_转换;
模板
算子T(){
CI=CI{std::move(to_convert)};
返回ci;
}
模板
T cast()
{
CI=CI{std::move(to_convert)};
返回ci;
}
};
然后像这样使用它:

auto y = from_string(s).cast<int, converter_impl<int> >();
autoy=from_字符串.cast();

因此没有办法传递第二个模板参数,这可能很有趣…?作为一种解决方法,您可以将模板化函数
cast
添加到
结构转换器中。然后,当隐式强制转换成为可能时,将调用操作符T
,当需要显式强制转换时,可以调用temlated函数。
auto y = from_string(s).cast<int, converter_impl<int> >();