簡體   English   中英

成員變量的類型應該取決於構造函數參數的類型

[英]Type of member variable should depend on constructor argument's type

我嘗試按如下方式定義A類:

template< typename T >
class A
{
  public:
    A( T elem )
      : _elem( elem )
    {}

  private:
    TYPE _elem; // "TYPE" should be either "T" in case "elem" is an r-value or "T&" in case "elem" is an l-value.
};

在這里,我希望_elem具有類型T ,以防構造函數的參數elem是r值,或者類型T&如果elem是l值。

有誰知道這是如何實現的?

在我們獲得類模板的模板參數推導之前 ,您需要使用輔助函數:

template <typename T>
auto make_a (T&& elem) {
    return A<T>{std::forward<T>(elem)};
}

這使用轉發引用來推斷參數是左值還是右值,並通過完美轉發參數來構造A int為例,如果傳遞左值,則T將為int& ,如果傳遞了右值,則T將為int

你的A模板應如下所示:

template< typename T >
class A
{
  public:
    A( T elem )
      : _elem( elem )
    {}

  private:
    T _elem;
};

如果你只想從工廠方法允許構造,你可以使make_a成為朋友並使構造函數成為私有的。

暫無
暫無

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

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