私はテンプレート関数を持っており、コンパイル時に特定のクラスのサブタイプまたはスーパータイプでインスタンス化されないようにしたいと考えています。テンプレートが特定のタイプのものであるというコンパイル時間アサーションを作成するにはどうすればよいですか?
これに違反すると、C++コンパイラエラーが発生することはありますか?
class base {
};
class derived : public base {
};
class lowest : public derived {
};
template <typename T>
bool isCorrect(const T& obj) {
typedef foo<T> D;
foo<T> *def = foo<T>::find();
return (def && def->getAnswer(object));
}
私だけにisCorrect
がクラスderived
はなく、base
やlowest
のために利用できるようにしたいです。注目すべき他の多くの最下位クラスと、除外される基本クラスの文字列と、受け入れ可能な代替派生クラスが存在することに注意してください。
明示的に指定する派生クラスのみにテンプレートを適用する方法はありますか?
可能重複[テンプレート制約C++](http://stackoverflow.com/questions/122316/template-constraints-c ) –
具体的には、これは役に立つかもしれません:http://www.boost.org/doc/libs/1_48_0/libs/concept_check/concept_check.htm –
あなたは単に過負荷を書きませんか? – GManNickG