Сообщение Re: Специализация метода. Нужно устранить ошибку от 24.08.2022 8:19
Изменено 24.08.2022 8:23 rg45
Re: Специализация метода. Нужно устранить ошибку
Здравствуйте, SVV, Вы писали:
SVV>Всем привет, есть такой код:
SVV>как правильно написать специализацию метода?
Здесь уже упомянули, что частичная специализация для функций не поддерживается. Но в таких случая обычно не составляет особого труда перейти от специализаций к перегрузкам. Примерно так:
http://coliru.stacked-crooked.com/a/9ff8360b3fef1f76
SVV>Всем привет, есть такой код:
Исходный пример | |
SVV>
| |
SVV>как правильно написать специализацию метода?
Здесь уже упомянули, что частичная специализация для функций не поддерживается. Но в таких случая обычно не составляет особого труда перейти от специализаций к перегрузкам. Примерно так:
http://coliru.stacked-crooked.com/a/9ff8360b3fef1f76
#include <iostream>
using u1 = unsigned char;
template<typename T>struct TypeH;
using TypeH1 = TypeH<int>;
using TypeH2 = TypeH<char>;
template <typename>
struct TypeHolder{};
template<typename T>
struct STest4
{
template<typename H> void foo() { foo(TypeHolder<H>{}); }// ключевой момент
void foo(TypeHolder<TypeH1>){ std::cout << "TypeH1" << std::endl; }
void foo(TypeHolder<TypeH2>){ std::cout << "TypeH2" << std::endl; }
};
int main()
{
STest4<float> st4;
st4.foo<TypeH1>();
st4.foo<TypeH2>();
}
Re: Специализация метода. Нужно устранить ошибку
Здравствуйте, SVV, Вы писали:
SVV>Всем привет, есть такой код:
SVV>как правильно написать специализацию метода?
Здесь уже упомянули, что частичная специализация для функций не поддерживается. Но в таких случая обычно не составляет особого труда перейти от специализаций к перегрузкам. Обрати внимание, использование остается именно таким, как в исходном примере, меняется только сама реализация полиморфизма. Примерно так:
http://coliru.stacked-crooked.com/a/9ff8360b3fef1f76
SVV>Всем привет, есть такой код:
Исходный пример | |
SVV>
| |
SVV>как правильно написать специализацию метода?
Здесь уже упомянули, что частичная специализация для функций не поддерживается. Но в таких случая обычно не составляет особого труда перейти от специализаций к перегрузкам. Обрати внимание, использование остается именно таким, как в исходном примере, меняется только сама реализация полиморфизма. Примерно так:
http://coliru.stacked-crooked.com/a/9ff8360b3fef1f76
#include <iostream>
using u1 = unsigned char;
template<typename T>struct TypeH;
using TypeH1 = TypeH<int>;
using TypeH2 = TypeH<char>;
template <typename>
struct TypeHolder{};
template<typename T>
struct STest4
{
template<typename H> void foo() { foo(TypeHolder<H>{}); }// ключевой момент
void foo(TypeHolder<TypeH1>){ std::cout << "TypeH1" << std::endl; }
void foo(TypeHolder<TypeH2>){ std::cout << "TypeH2" << std::endl; }
};
int main()
{
STest4<float> st4;
st4.foo<TypeH1>();
st4.foo<TypeH2>();
}