C++ 如何直接调用转换运算符? struct-Bob { 模板 void运算符()()常量 { T; } 模板 运算符T()常量 { T; 返回t; } };
我可以像这样直接调用Bob的操作符()C++ 如何直接调用转换运算符? struct-Bob { 模板 void运算符()()常量 { T; } 模板 运算符T()常量 { T; 返回t; } };,c++,C++,我可以像这样直接调用Bob的操作符() struct Bob { template<class T> void operator () () const { T t; } template<class T> operator T () const { T t; return t; } }; Bob; b、 运算符(); 如何使用这样的特定模板参数直接调用转
struct Bob
{
template<class T>
void operator () () const
{
T t;
}
template<class T>
operator T () const
{
T t;
return t;
}
};
Bob;
b、 运算符();
如何使用这样的特定模板参数直接调用转换运算符
Bob b;
b.operator()<int>();
Bob;
标准::字符串s=b.???();
不可能使用静态_cast
Bob b;
std::string s = b.???<std::string>();
Bob;
std::string s=静态_cast(b);
错误:重载的'basic_string(Bob&')调用不明确
问题
如何使用模板参数直接调用,否则不可能。我知道使用包装函数有一些变通方法。使用辅助函数:
Bob b;
std::string s = static_cast<std::string>(b);
模板
T显式_-cast(T){return T;}
int main()
{
鲍勃b;
std::string s=显式转换(b);
}
您可以这样直接(明确)调用它:
template< typename T >
T explicit_cast( T t ) { return t; }
int main()
{
Bob b;
std::string s = explicit_cast<std::string>(b);
}
但它不是“带有特定的模板参数”(但不需要)
另见咳嗽。。。值参数。。。咳嗽。我想知道是否可以直接调用。@WhozCraig我认为在这种情况下,by-value参数比by-const引用更好,因为它允许更多的优化。或者你不这么认为?我认为值和引用都应该通过重载来提供,但是再一次,我不确定我是否会发现自己能够做这两件事=)你的“显式类型转换”类似于(定义更好)哈,很好的尝试。不,据我所知不可能。这就是我建议使用实函数的原因。此外,如果你想像普通函数一样调用它,那么把它变成一个转换函数又有什么意义呢?@Dave,其他操作符也是如此。一个备份,以防您出于某种原因需要备份。孩子们,这就是隐式转换不好的原因。
b.operator std::string()
?或者甚至b.operator decltype()代码>(我承认这让我很惊讶,因为它在叮当作响中工作)。同样,simplestd::string s=b也是如此我想这是有道理的。Fwiw,std::string s=b代码>也可以工作(至少在我的装备上)。但这开始以相当快的速度偏离原来的问题(当然是WhozCraig)(转换运算符的目的毕竟是启用隐式转换)。但我链接到了您的另一条评论,其中添加了decltype
:)
Bob b;
std::string s = b.operator std::string();