久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

聲明模板類的模板友元函數

declare template friend function of template class(聲明模板類的模板友元函數)
本文介紹了聲明模板類的模板友元函數的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

限時送ChatGPT賬號..

我有一個類模板 Obj 和一個函數模板 make_obj.Obj 定義了一個 private 單個構造函數,該構造函數接受對其要綁定到的模板化類型的引用.

I have a class template Obj and a function template make_obj. Obj has a private single constructor defined, which takes a reference to its templated type to bind to.

template <typename T>
class Obj {
  private:
    T& t;
    Obj(T& t)
        : t{t}
    { }
};

template <typename T>
Obj<T> make_obj(T& t) { 
    return {t};
}

我想要的是將 make_obj 函數聲明為 friend 以便它可以創建 Obj 的,但沒有其他人可以(除了通過復制構造函數).

What I want is to declare the make_obj function a friend so that it can create Obj's, but no one else can (except via the copy ctor).

我嘗試了幾個朋友聲明,包括

I have tried several friend declaration including

friend Obj make_obj(T&);

template <typename T1, typename T2>
friend Obj<T1> make_obj(T2&);

后者是對 Obj 類的 make_obj 朋友的所有模板實例化的不太理想的嘗試.但是,在這兩種情況下,我都會遇到相同的錯誤:

The latter being a less than desirable attempt at making all template instantiations of make_obj friends of the Obj class. However in both of these cases I get the same error:

error: calling a private constructor of class 'Obj<char const[6]>'
    return {t};
           ^

note: in instantiation of function template specialization
      'make_obj<const char *>' requested here
    auto s = make_obj("hello");
             ^

嘗試做 make_obj("hello"); 用于示例目的.

trying to do make_obj("hello"); for example purposes.

如何只允許 make_obj 訪問 Obj 的值構造器?

How can I allow only make_obj access to Obj's value contructor?

推薦答案

你需要一些前置聲明:

template <typename T>
class Obj;

template <typename T>
Obj<T> make_obj(T t);

template <typename T>
class Obj {
private:
    T & t;
    Obj (T & t) : t(t) { }
    Obj() = delete;

    friend Obj make_obj<T>(T t);
};

template <typename T>
Obj<T> make_obj(T t) { 
    return Obj<T>(t);
}

實例

順便說一句:我不認為你真的想要 T &t; 用于您的類的成員變量.可能 T t; 是更好的選擇 ;)

And BTW: I don't think you really want T & t; for your class' member variable. Probably T t; is a better choice ;)

這篇關于聲明模板類的模板友元函數的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Difference between std::reference_wrapper and simple pointer?(std::reference_wrapper 和簡單指針的區別?)
Difference between const. pointer and reference?(常量之間的區別.指針和引用?)
How to access the contents of a vector from a pointer to the vector in C++?(c++ - 如何從指向向量的指針訪問向量的內容?)
Meaning of *amp; and **amp; in C++(*amp; 的含義和**amp;在 C++ 中)
Why can#39;t I do polymorphism with normal variables?(為什么我不能對普通變量進行多態?)
Dereferencing deleted pointers always result in an Access Violation?(取消引用已刪除的指針總是會導致訪問沖突?)
主站蜘蛛池模板: 免费黄色录像片 | 一区二区三区精品视频 | 一区二区三区精品在线视频 | 国产高清视频一区 | 81精品国产乱码久久久久久 | 少妇精品久久久久久久久久 | 久久99久久98精品免观看软件 | 精品日韩一区二区 | av网站观看 | 成人免费视频在线观看 | 久久综合一区 | 一区二区av在线 | 精品国产伦一区二区三区观看说明 | 欧美一级片免费看 | 玖玖视频网 | 亚洲专区在线 | 免费视频久久久久 | 国产在线aa| 亚洲欧美成人影院 | 国产一区二区黑人欧美xxxx | 美日韩精品 | 久久精品日产第一区二区三区 | 中文字幕成人网 | 日本黄色影片在线观看 | 久久久久久国产精品免费免费 | 九九99靖品 | 欧美日本高清 | 国产精品毛片在线 | 日韩午夜在线播放 | 欧美激情一区二区三区 | 欧美日韩精品免费观看 | 亚洲一区二区三区四区五区午夜 | 国产一级免费视频 | 黄色片在线免费看 | 视频一区在线观看 | 欧美精品第一页 | 日韩福利 | 亚洲国产成人在线观看 | 欧美乱码精品一区二区三区 | 中文字幕中文字幕 | 2一3sex性hd |