struct Bob
{
template<class T>
void operator () () const
{
T t;
}
template<class T>
operator T () const
{
T t;
return t;
}
};
我可以像这样直接调用Bob的operator()
Bob b;
b.operator()<int>();
如何使用这样的特定模板参数直接调用转换运算符?
Bob b;
std::string s = b.???<std::string>();
无法使用static_cast
Bob b;
std::string s = static_cast<std::string>(b);
error: call of overloaded ‘basic_string(Bob&)’ is ambiguous
问题 如何直接使用模板参数调用或者它是不可能的。我知道有一些使用包装函数的变通方法。
答案 0 :(得分:10)
您可以直接(显式)直接调用它:
Bob b;
std::string s = b.operator std::string();
但它不是“使用特定模板参数”(但不需要)。
答案 1 :(得分:3)
使用帮助函数:
template< typename T >
T explicit_cast( T t ) { return t; }
int main()
{
Bob b;
std::string s = explicit_cast<std::string>(b);
}