テンプレートクラスがあるシナリオがあります
template<typename X, typename Y>
class Foo
{
typedef Y::NestedType Bar;
int A (Bar thing);
void B();
int C(X that);
// other stuff
};
次に、Xが特定の型である場合にA()メソッドの動作を変えたいと思います(ただし、BとCは同じままで、実際のコードには実際には約10個の他のメソッドがあり、そのうちのいくつかは非常に長く、頻繁に調整する必要があるため、フルクラスの特殊化を避け、フルクラスの実装をコピーして貼り付けます)
私は続けて書いた:
template<typename T>
int Foo<MyType, T>::A(Bar thing);
しかし、私のコンパイラ(clang 163.7.1)は、これをあらゆる種類のテンプレートの特殊化と見なすことさえ拒否しました。
私がコードを書いた方法に隠された構文エラーがありますか、それともこのコーディングスタイルは無効なC ++ですか?残念ながら、他のコンパイラがこのイディオムをサポートしていても、私の会社はclangで立ち往生しています。
これについて助けてくれてありがとう。