7

1日14時間労働が数週間続いたせいで、私の脳は溶けてしまった。

テンプレート クラスがあり、このクラスのテンプレート変換コンストラクターを作成し、そのコンストラクターを特殊化しようとしています。コンパイラ (MSVC9) にはかなり不満があります。これは、私が書こうとしている実際のコードの最小限の例です。コンパイラ エラーはコードとインラインです。

私の脳を溶かすのを手伝ってください。私がやろうとしていることをするためにここで必要な構文は何ですか? 注: 私の実際のコードでは、convert コンストラクターを宣言の外で定義する必要があるため、これはオプションではありません。

#include <string>
#include <sstream>
using namespace std;

template<typename A>
class Gizmo
{
public:
    Gizmo() : a_() {};
    Gizmo(const A& a) : a_(a) {};
    template<typename Conv> Gizmo(const Conv& conv) : a_(static_cast<A>(conv)) {};

private:
    A a_;
};

//
// ERROR HERE:
// " error C2039: 'Gizmo<B>' : is not a member of 'Gizmo<A>'"
//
template<> template<typename B> Gizmo<string>::Gizmo<typename B>(const B& b)
{
    stringstream ss;
    ss << b;
    ss >> a_;
}

int main()
{
    Gizmo<int> a_int;
    Gizmo<int> a_int2(123);
    Gizmo<string> a_f(546.0f);

    return 0;
}
4

1 に答える 1

7
template<> template<typename B> Gizmo<string>::Gizmo(const B& b)

また、typenameキーワード fromを削除するconst typename B& 必要があることに注意してください。

于 2010-11-11T20:15:37.763 に答える