У меня есть класс, который имеет общедоступные шаблонные методы. Этот класс имеет 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>();
Но этот код не компилируется. Мне нужно, чтобы использование было точно таким же (манипулировать только с помощью стратегии).
Это проблема:
SomeClass<Strategy1> sc();
Это объявление функции с именем sc который не принимает аргументов и возвращает SomeClass<Strategy1>, Это обычно называют неприятным разбором (но не самый досадный разбор). То, что вы хотите, это:
sc
SomeClass<Strategy1>
SomeClass<Strategy1> sc;
Других решений пока нет …