按参数类型专门化重载构造函数 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;
}
我可以像这样专门化模板 class 构造函数吗? Class foo 一般适用于类型,但是当它的构造函数被调用时,它作为参数的类型会有所不同。如果可以的话,我想使用模板,但我看到的答案是 'Cant use template in constructor'。
将 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))
{
}
};
当模板参数类型为 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;
}
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;
}
我可以像这样专门化模板 class 构造函数吗? Class foo 一般适用于类型,但是当它的构造函数被调用时,它作为参数的类型会有所不同。如果可以的话,我想使用模板,但我看到的答案是 'Cant use template in constructor'。
将 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))
{
}
};
当模板参数类型为 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;
}