Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/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++ 如何直接调用转换运算符? struct-Bob { 模板 void运算符()()常量 { T; } 模板 运算符T()常量 { T; 返回t; } };_C++ - Fatal编程技术网

C++ 如何直接调用转换运算符? struct-Bob { 模板 void运算符()()常量 { T; } 模板 运算符T()常量 { T; 返回t; } };

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、 运算符(); 如何使用这样的特定模板参数直接调用转

我可以像这样直接调用Bob的操作符()

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()(我承认这让我很惊讶,因为它在叮当作响中工作)。同样,simple
std::string s=b也是如此std::string s=b也可以工作(至少在我的装备上)。但这开始以相当快的速度偏离原来的问题(当然是WhozCraig)(转换运算符的目的毕竟是启用隐式转换)。但我链接到了您的另一条评论,其中添加了
decltype
:)
Bob b;
std::string s = b.operator std::string();