Использование шаблонного класса с шаблонным методом в C++
У меня есть класс, который имеет общедоступные шаблонные методы. Этот класс имеет 2 стратегии поведения, которые я хочу передать через шаблон класса.
template<class Strategy>
class SomeClass {
public:
template<class B>
void ProcessType(){}
};
// And do something like this:
SomeClass<Strategy1> sc();
sc.ProcessType<SomeClassType>();
sc.ProcessType<SomeClassType2>();
SomeClass<Strategy2> sc2();
sc2.ProcessType<SomeClassType>();
sc2.ProcessType<SomeClassType2>();
Но этот код не компилируется. Мне нужно сохранить использование точно таким же образом (чтобы манипулировать только с помощью стратегии).
1 ответ
Решение
Это проблема:
SomeClass<Strategy1> sc();
Это объявление функции с именем sc
который не принимает аргументов и возвращает SomeClass<Strategy1>
, Это обычно известно как неприятный анализ (но не самый неприятный анализ). То, что вы хотите, это:
SomeClass<Strategy1> sc;