按参数C++类型专门化重载构造函数
Specialize overloaded constructor by type of parameter C++
template <typename T> class foo
{
private:
T m_var;
public:
foo(T init_var)
{
m_var = init_var;
}
foo(int init_var)
{
m_var = init_var + 1;
}
};
int main()
{
foo1 = foo<int>(3); // foo1.m_var is 4
foo2 = foo<char>('a'); // foo2.m_var is a
return 0;
}
我可以像这样专门化模板类构造函数吗?类 foo 适用于一般类型,但是当调用其构造函数时,它的工作方式与参数类型不同。如果可以的话,我想使用模板,但我看到的答案是"不能在构造函数中使用模板"。
当模板参数类型int
时,可以通过添加专用化来调用不同的构造函数。
template <typename T>
class foo
{
private:
T m_var;
public:
foo(T init_var)
{
m_var = init_var;
}
};
template<>
foo<int>::foo(int init_var)
{
m_var = init_var + 1;
}
现场演示
将 increment-if-int 行为委托给一个单独的组件可能会更容易,该组件只执行此操作:
template <typename T>
struct IncrementIfInt
{
const T& operator()(const T& value) { return value; }
};
template <>
struct IncrementIfInt<int>
{
int operator()(int value) { return value + 1; }
};
template <typename T> class foo
{
private:
T m_var;
public:
foo(T init_var)
: m_var(IncrementIfInt<T>()(init_var))
{
}
};
相关文章:
- 通过 C++ 中的重载构造函数初始化未知类型的变量
- C++将带有重载构造函数的对象添加到另一个对象
- 将重载构造函数传递给类之间的函数
- 使用重载构造函数时出现不完整的类型错误
- 在 if 语句中调用重载构造函数失败
- C++ 具有常量数组和initializer_list的重载构造函数
- C++头/实现文件中的默认和重载构造函数?
- 有没有办法用 2D 数组 (int) 重载构造函数?
- C++重载构造函数问题
- C++:使用结构或枚举重载构造函数之间的区别
- 未调用模板成员的重载构造函数
- 如果我们在c++中重载构造函数,那么默认构造函数是否仍然存在
- 如何为显式重载构造函数启用复制初始化
- 执行重载构造函数的原因和时间
- c++ 在对象组合上使用重载构造函数
- 按参数C++类型专门化重载构造函数
- 具有公共重载构造函数的私有枚举
- 如何处理默认构造函数和重载构造函数之间的歧义
- 变量不会在重载构造函数C++后保持声明状态
- 对重载构造函数 C++ 的不明确调用