Здравствуйте, vopl, Вы писали:
V>Здравствуйте, SVV, Вы писали:
SVV>>как правильно написать специализацию метода?
V>Напрямую — никак. Это будет частичная специализация, язык такое не позволяет. Но, можно нечто похожее организовать через SFINAE или через концепты
...
V>Еще можно вынести специализацию в другой класс и его уже специализировать, а foo оставить обобщенным..
А как подобное провернуть с конструктором? Проблема с вызовом такого конструктора:
template<typename T>
struct STest4
{
template<typename H> STest4() requires is_same_v<H, TypeH1> { cout << "ctor(TypeH1)" << endl; }
template<typename H> STest4() requires is_same_v<H, TypeH2> { cout << "ctor(TypeH2)" << endl; }
...
};
STest4<float> st5_1<TypeH1>();//warning C4930: 'STest4<float> st5_1(void)': prototyped function not called (was a variable definition intended?)
STest4<float> st5_2<TypeH2>();//warning C4930: 'STest4<float> st5_1(void)': prototyped function not called (was a variable definition intended?)
код компилируется, но конструктор не вызывается.