是否可以调用显式指定模板参数的模板化强制转换运算符
Is it possible to call the templated cast operator explicitly specifying template parameters?
考虑代码:
#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
结构的强制转换运算符来显式指定模板参数。语法:
from_string(s).operator int<int, converter_impl<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;
}
};
并像这样使用:
auto y = from_string(s).cast<int, converter_impl<int> >();
相关文章:
- 有没有一种方法可以通过"typedef"为重新定义的基本类型定义特征和强制转换运算符
- 构造函数和转换运算符之间的重载解析
- 分配给转换运算符失败-C++
- 转换运算符不适用于sleep_until
- 尝试使用算术运算符阻止隐式转换
- 错误 C2679:二进制"<<":未找到采用类型 'std::string_view' 的右侧操作数的运算符(或者没有可接受的转换)
- 是否可以将带有字符串化运算符的宏转换为 constexpr?
- C2678 二进制 '==':未找到采用 'Card' 类型左操作数的运算符(或者没有可接受的转换)
- 继承模板化转换运算符
- 将 OR 逻辑运算符从 C++ 转换为 Fortran
- 模板转换运算符在 clang 6 和 clang 7 之间的区别
- 如何在C++中正确重载运算符转换字符*?
- 将私有结构哈希器运算符转换为静态
- 混合类型的Boost运算符-转换和私有成员
- 如何将 c++ 运算符转换为 Java
- 运算符转换,GCC 和 clang:哪个编译器是正确的
- 将 istream 运算符>>转换为 istream getline
- 在C++中,将任意在位运算符转换为一元运算符
- 将运算符转换为 std::复杂<double>
- 为什么按位否定运算符"~"转换为 int?(从"int"转换为"无符号字符"可能会改变其值)