簡體   English   中英

通過參數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))
  {
  }
};

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM