1

コピー コンストラクターを持つテンプレート クラスがあります。

struct index_method {/*whatever*/};

template <class A, class B>
class ExampleClass
{
public:
   ExampleClass(void) {}
   template <class C>
   ExampleClass( const ExampleClass<A,C>& src_, const B& b_ = B() ) : _b(b_) { }
private:
   B _b;
};

次のテンプレート コンストラクターの特殊化は、gcc 4.7.0 で適切にコンパイルされます。

template <>
template <>
ExampleClass<double,index_method>::ExampleClass<index_method>( const ExampleClass<double,index_method>& src_, const index_method& b_ )
  : _b(b_)
{
}

しかし、MSVC には問題があります。

エラー C2976: 'ExampleClass': テンプレート引数が少なすぎます

別のトピックに基づいて、MSVC 用のより単純なコードを試しました。

ExampleClass<double,index_method>::ExampleClass<index_method>( const ExampleClass<double,index_method>& src_, const index_method& method_ )
  : _b(method_)
{
}

しかし、それも機能しません。

MSVC 2012 でテンプレート クラスのテンプレート コピー コンストラクターを指定する方法はありますか?

4

1 に答える 1

3

gccがコンパイルするので理由はわかりませんが、MSVCとしてリジェクトをclangしますが、別のエラーが発生します。ただし、次のコードを使用するだけです

struct index_method {/*whatever*/};

template <class A, class B>
class ExampleClass
{
public:
ExampleClass(void) {}
template <class C>
ExampleClass( const ExampleClass<A,C>& src_, const B& b_ = B() ) : _b(b_) { }
private:
B _b;
};

template <>
template <>
ExampleClass<double,index_method>::ExampleClass
( const ExampleClass<double,index_method>& src_, const index_method& b_ )
: _b(b_)
{
}

于 2013-10-24T10:41:36.530 に答える