模板类专业化具有成员变量和方法的默认值
Template class specialization with default value for member variables and methods
我有一个类模板:
template<typename T>
struct DefaultPattern {
using type = int;
static int CalculateValue(const T& input) {
return 0;
}
};
对于每种类型的T
,我都会有一个专业化。问题在于,在专业类中,我需要定义DefaultPattern
中定义的所有成员变量和方法,即使它们可能具有与DefaultPattern
中的值相同的值。这是一个示例:
// A specialization for int.
template<>
struct DefaultPattern<int> {
// Same as DefaultPattern but I need to define it again.
using type = int;
static int CalculateValue(const int& input) {
return input + 2;
}
};
有一种方法,以便当我进行专业化时,我只需要定义那些与DefaultPattern
不同的成员?
是否有一种方法,以便当我进行专业化时,我只需要定义那些与DefaultPattern不同的成员?
可能的解决方案是一种自我传播:您的专业化可以继承形式的通用模板。请注意,要从通用模板继承,规范化使用特定的实例化(例如,T = long
在下面使用(。
例如:
template <>
struct DefaultPattern<int> : public DefaultPattern<long>
{
static int CalculateValue (int const & input)
{ return input + 2; }
};
因此,DefaultPattern<int>
从DefaulPattern<long>
(或DefaultPattern<std::string>
或其他东西(继承type = int
,然后重新定义CalculateValue()
以下是一个完整的工作示例:
#include <iostream>
#include <type_traits>
template <typename T>
struct DefaultPattern
{
using type = int;
static int CalculateValue (T const &)
{ return 0; }
};
template <>
struct DefaultPattern<int> : public DefaultPattern<long>
{
static int CalculateValue (int const & input)
{ return input + 2; }
};
int main ()
{
static_assert( std::is_same<DefaultPattern<int>::type, int>{}, "!" );
std::cout << DefaultPattern<long>::CalculateValue(1L) << std::endl;
std::cout << DefaultPattern<int>::CalculateValue(1) << std::endl;
}
相关文章:
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 枚举环境变量的惯用C++14/C++17方法
- 绑定派生类方法C++从实例范围之外的分隔 std::function 变量调用
- 是否可以依赖函数范围的静态变量来执行程序关闭期间调用的方法?
- 从私有成员变量的成员方法返回unique_ptr
- 在派生类中使用基类的私有成员变量的最佳方法
- 打印所有继承的类成员变量和方法
- C++方法中的引用变量
- Visual C++: MSVC vs. GCC+CLANG: 处理 lambda 捕获类成员变量,正确的方法是什么?
- 有没有一种通用的方法来实现不变量
- 有没有将变量名称转换为双指针的简短方法?
- C++:将向量传递到构造函数以创建成员变量的最佳方法?
- C++中变量混叠的最佳方法
- 比较C++变量的最有效方法
- 使用类在C++中存储和列出变量/方法是否是一种好的做法
- 存储变量的更有效方法是什么?
- 对具有相同方法的不同类使用一个变量
- 如何使用另一个变量访问对象的变量/方法
- C++,静态局部变量(方法)与全局(文件)变量有什么区别
- Awesomium允许我在JS中调用/使用c++变量/方法吗?