带非类型参数的成员函数的部分专门化
Partial specialisation of member function with non-type parameter
我有一个模板类,它既有类型模板参数,也有非类型模板参数。我想专门化一个成员函数,我发现,如下面的例子所示,我可以做一个完全的专门化。
template<typename T, int R>
struct foo
{
foo(const T& v) :
value_(v)
{}
void bar()
{
std::cout << "Generic" << std::endl;
for (int i = 0; i < R; ++i)
std::cout << value_ << std::endl;
}
T value_;
};
template<>
void foo<float, 3>::bar()
{
std::cout << "Float" << std::endl;
for (int i = 0; i < 3; ++i)
std::cout << value_ << std::endl;
}
但是这个局部专门化不能编译。
template<int R>
void foo<double, R>::bar()
{
std::cout << "Double" << std::endl;
for (int i = 0; i < R; ++i)
std::cout << value_ << std::endl;
}
有没有一种方法可以实现我正在尝试的东西,有人会知道吗?
可以将函数封装在类中。
只能部分特化类,不能部分特化函数。
template<typename T, int R>
struct foo
{
foo(const T& v) :
value_(v)
{}
void bar()
{
return bar_impl< T, R >::bar( * this );
}
friend struct bar_impl< T, R >;
T value_;
};
template< typename T, int R >
struct bar_impl {
static void bar( foo< T, R > &t ) {
std::cout << "Generic" << std::endl;
for (int i = 0; i < R; ++i)
std::cout << t.value_ << std::endl;
}
};
template<>
struct bar_impl<float, 3> {
static void bar( foo< float, 3 > &t ) {
std::cout << "Float" << std::endl;
for (int i = 0; i < 3; ++i)
std::cout << t.value_ << std::endl;
}
};
template<int R>
struct bar_impl<double, R> {
static void bar( foo< double, R > &t ) {
std::cout << "Double" << std::endl;
for (int i = 0; i < R; ++i)
std::cout << t.value_ << std::endl;
}
};
局部专门化只适用于整个类,而不适用于成员函数。所以你需要
template<int R>
struct foo<double, R>
{
foo(const double& v) :
value_(v)
{}
void bar()
{
std::cout << "Double" << std::endl;
for (int i = 0; i < R; ++i)
std::cout << value_ << std::endl;
}
double value_;
};
相关文章:
- 尝试根据类中 typedef 的存在来专门化模板函数
- 如何基于模板化类的基类专门化成员函数
- 专门化模板覆盖函数/避免对象切片
- 如何使用模板化类专门化模板化函数?
- 线程 std::调用未知类型,无法专门化函数错误
- 如何在编译时专门化大型模板函数中的小部分
- 模板函数,其中一个参数需要专门化,而另一个不需要
- 错误 C2893 无法专门化函数模板'unknown-type std::invoke(_Callable &&,_Types &&...)'
- 从 std 命名空间中专门化函数模板的想法有多糟糕?
- 使用decltype尾部返回类型专门化函数模板
- 为模板化派生类专门化函数模板
- C++模板-专门化函数
- 在单独的.cpp文件中专门化函数模板
- 创建专门化函数模板的最佳方法是什么?
- 用泛型返回类型专门化函数
- 可以将运行时确定的模板参数传递给专门化函数吗?
- 根据调用方/上下文专门化函数的行为
- 专门化函数从其他函数调用
- c++中专门化函数模板的语法
- c++对枚举的专门化函数