Re[2]: Специализация метода. Нужно устранить ошибку
От: SVV Беларусь  
Дата: 23.08.22 14:40
Оценка:
Здравствуйте, 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?)


код компилируется, но конструктор не вызывается.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.