12
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

问题 如何使用模板参数直接调用或不可能。我知道有使用包装功能的解决方法。

4

2 回答 2

18

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

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

但它不是“带有特定模板参数”(但没有必要)。

另见WhozCraig 的评论

于 2013-08-30T18:27:45.283 回答
3

使用辅助函数:

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

int main()
{
    Bob b;
    std::string s = explicit_cast<std::string>(b);
}
于 2013-08-30T18:17:51.527 回答