12
struct Bob
{
    template<class T>
    void operator () () const
    {
        T t;
    }

    template<class T>
    operator T () const
    {
        T t;
        return t;
    }
};

このようにボブの 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

質問 テンプレートパラメータで直接呼び出す方法 OR 不可能です。ラッピング機能を使用した回避策があることは知っています。

4

2 に答える 2

18

次のように直接 (明示的に) 呼び出すことができます。

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

ただし、「特定のテンプレートパラメーターを使用する」わけではありません(ただし、その必要はありません)。

WhozCraig のコメントも参照してください。

于 2013-08-30T18:27:45.283 に答える