2017-02-08 4 views
0

標準ライブラリのみでC++ 03(クロスプラットフォーム)を使用しています。サポートされていないクラスが与えられた場合にコンパイルに失敗するテンプレートクラスがあります。 。 は、これまでのところ私は、実行時エラーが生成されています:テンプレートクラス - サポートされていないクラスの強制コンパイルエラー

template <class Key, class Val> 
class MyClass: public other_class<Key, Val> 
{ 
public: 

    template<class T1M, class T2M> 
    struct ThisGetter 
    { 
     static T1M Get() 
     { 
      throw(std::exception("Failed")); //Change this to compilation failure 
     } 
    }; 

    template<class T2M> 
    struct ThisGetter<int, T2M> 
    { 
     static Key Get() 
     { 
      int temp = std::numeric_limits<int>::min(); 
      return temp; 
     } 
    }; 
}; 

を可能ならば、私は次のことを持っている、とします

MyClass<int, int> works; // compilation successful 
MyClass<string, int> fails; // compilation failed 

が、それは可能ですか?私が正しく

おかげで、私はそれを削除することを決めたブーストといくつかの問題の後

+0

'static_assert(false)'? –

+1

@PavelGolubev pre C++ 11標準ではありません。 –

+0

これはC++ 11です。私はブーストを使用しません。 –

答えて

0

を理解していれば最初ThisGetterを削除することは行われ傾けます。 (何らかの理由でcentos7上のエラーが、それはcentos6/Win/Mac版で働いていた)私は宣言し、次のメソッドを使用しました:

template<bool> struct MyStaticAssert; 
template<> struct MyStaticAssert<true> {}; 

し、不要な機能で

foo() 
{ 
    MyStaticAssert<false>() 
} 

がに開始しますテンプレートのように:)

関連する問題