У меня есть метод foo в классе C, который либо вызывает foo_1, либо foo_2. Этот метод Foo() должен быть определен в C, потому что Foo() является чисто виртуальным в BaseClass, и я на самом деле должны сделать объекты типа C. Код ниже:Ограничения на создание шаблона C++
template <class T>
class C:public BaseClass{
void foo() {
if (something()) foo_1;
else foo_2;
}
void foo_1() {
....
}
void foo_2() {
....
T t;
t.bar(); // requires class T to provide a method bar()
....
}
};
Теперь для большинства типов T foo_1 будет достаточно, но для некоторых типов foo_2 будет называться (в зависимости от чего-то()). Однако компилятор настаивает на создании экземпляров как foo_1 , так и foo_2, поскольку они могут быть вызваны.
Это налагает бремя на Т, которое оно должно предусмотреть метод .
Как сказать компилятору следующее:
- если T не имеет бар(), по-прежнему позволяют это как тип инстанцировании?
Я имел в виду, что foo() является чисто виртуальным в BaseClass. – user231536
@ и имя его класса 'C'. Я не думаю, что он имеет в виду язык С. – stinky472
Что такое 'something()'? Является ли это константой времени компиляции? –