如何直接调用转换运算符?

时间:2013-08-30 18:10:16

标签: c++

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);

http://ideone.com/FoBKp7

error: call of overloaded ‘basic_string(Bob&)’ is ambiguous

问题 如何直接使用模板参数调用或者它是不可能的。我知道有一些使用包装函数的变通方法。

2 个答案:

答案 0 :(得分:10)

您可以直接(显式)直接调用它:

Bob b;
std::string s = b.operator std::string();

但它不是“使用特定模板参数”(但不需要)。

另见WhozCraig's comment

答案 1 :(得分:3)

使用帮助函数:

template< typename T >
T explicit_cast( T t ) { return t; }

int main()
{
    Bob b;
    std::string s = explicit_cast<std::string>(b);
}