声明模板类的模板友元函数

2023-12-06

我有一个类模板Obj和一个函数模板make_obj. Obj has a private定义了单个构造函数,它引用要绑定到的模板化类型。

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函数afriend以便它可以创建Obj的,但没有其他人可以(除了通过复制者)。


我尝试过几种朋友声明,包括

friend Obj make_obj(T&);

and

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

后者是一个不太理想的尝试,使所有模板实例化make_obj的朋友Obj班级。但是在这两种情况下我都会遇到相同的错误:

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");例如目的。

我怎样才能只允许make_obj进入Obj的值构造函数?


您需要一些前向声明:

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;是一个更好的选择;)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

声明模板类的模板友元函数 的相关文章

随机推荐

  • 从 Objective-C 代码调用 javascript

    我发现了很多从javascript调用objective c代码的方法 但我想从objective c调用javascript代码 上次我从 Objective C 提交了 HTML FORM 现在我不想调用 JavaScript 方法 您
  • 防止浏览器加载拖放文件

    我正在向我的页面添加一个 html5 拖放上传器 当文件被放入上传区域时 一切都运行良好 但是 如果我不小心将文件放到上传区域之外 浏览器会加载本地文件 就像它是新页面一样 我怎样才能防止这种行为 Thanks 您可以向调用的窗口添加事件侦
  • “strftime”不是可识别的内置函数名称

    我正在使用 Microsoft SQL Database Management Studio 它不允许我使用 strftime 函数来运行查询 我必须按月创建一个表格 其中包含每个月的新用户和退订者 这就是我本质上造成错误的原因 SELEC
  • SQL查询,仅当列不为空时才选择,否则不选择

    这就是我想做的 SELECT a b c FROM tbl WHERE a IS NOT NULL OR b IS NOT NULL OR c IS NOT NULL WHERE id 如果 a 和 c 为空而 b 不是 我仍然收到此结果集
  • EL 支持重载方法吗?

    我升级了 Java EE Web 应用程序以使用较新的 PrimeFaces 版本 突然在 PrimeFaces commandlink 的操作属性中调用重载 bean 方法不再起作用 我尝试使用 JSF 默认命令链接来测试它 但这个也不起
  • Win32 分割器控件

    在 Win32 的所有不同控件中 有哪些基本的 轻的可用的 Splitter Splitcontainer 控件 意味着一两个 C C 文件max 我似乎无法在 Visual Studio 中显示的默认控件中找到任何内容 并且我在网上找到的
  • Android OpenGL ES 1.1 白盒纹理

    我遇到的问题是资源的纹理变成白色 这个问题似乎只发生在手机上 当然是 Droid X 但它在模拟器上运行得很好 我已经研究这个问题好几天了 并尝试了很多东西 纹理是 POT 范围从 8x8 到 128x128纹理位于 res drawabl
  • 如何更改ggboxplot中的x轴标签

    我有一个包含多个因素的数据框 我使用 ggboxplot 来获取一个箱形图 并对不同类别进行比较 我对 x 轴标签不满意 我尝试了不同的方法 但未能达到我的预期 用于创建绘图的代码是 df lt data frame country sam
  • 使用 python selenium 进行网页测试:执行速度非常慢

    我使用 Selenium 用 Python 编写了一个非常简单的网页测试 这里是代码 from selenium import webdriver import unittest from selenium webdriver common
  • 如何使用 facebook api 隐藏页面帖子

    我有这个代码 它来自这个链接https developers facebook com docs reference api page 请参阅 隐藏页面帖子 我没有任何错误 但我的问题是 这段代码不起作用 页面帖子仍未隐藏 下面是我的代码
  • Cosmos DB 固定 (10GB) 集合的分区键的用途

    在 Cosmos DB 文档中 我看到分配固定 10GB 集合意味着只会分配一个分区来保存集合中的文档 我的问题 如果我选择固定集合 如果我只有一个分区 为什么仍然提示我选择分区键 我的猜测是 单个分区指的是单个物理分区 但仍然可以在单个物
  • 使用 Appium 在真实 Android 设备上以隐身模式打开 Chrome

    我正在使用 Appium 在 Android 版 Chrome 上测试我的网站 我想为 Android 版 Chrome 添加一些选项 例如隐身模式和禁用缓存的可能性 我尝试使用以下示例代码 但它无法正常工作 Appium 能够在我的 An
  • 在 Cucumber around Hook (Ruby) 中多次调用 Block

    我正在尝试运行一个场景数 30 次 以获得一个很好的统计样本 然而该块只执行一次 随后的每次都会导致场景被调用但不执行 尽管它表示该场景在大约 5 毫秒的时间内成功完成 Around mass benchmark do scenario b
  • 使用 Groovy 计算两个日期之间的月份差异

    我需要计算两个日期之间的月份差异 start new Date 112 4 30 Wed May 30 00 00 00 CEST 2012 end new Date 111 9 11 Tue Oct 11 00 00 00 CEST 20
  • Python 3中reverse()的时间复杂度

    Python 3 中的 returned 的时间复杂度是多少 我认为答案是 O 1 但我想澄清它是对还是错 reversed some list 在我的机器上总是需要大约 120ns 才能完成 这是 O 1 时间复杂度的明显标志 这是因为这
  • 让 Pyinstaller 识别 Kivy Garden Matplotlib 模块的路径

    这类似于 PyInstaller 中的 Kivy Garden 试图跟踪导入除了我将提供更多详细信息 希望使人们更容易测试并提供具体的解决方案 我已经使用 Kivy 1 9 1 构建了一个 Python 2 7 13 应用程序 并尝试使用
  • 在 Azure 中,我可以从 C# WebJob 调用 Python 脚本吗?

    我想用 C 创建一个 WebJob 不幸的是 我需要使用 Python 3 脚本 因为目前没有合适的库来执行我需要使用 C 执行的 1 个特定任务 例如 参见这个答案 例子 是否可以让我的 WebJob 调用 Python 脚本 我可以将
  • BreezeJS:在控制器中应用客户端查询

    无论如何 是否可以在控制器中应用用户查询以便对最终结果集执行某些操作 举个例子 HttpGet public IQueryable
  • 如何在 Monogame Windows Phone 8 游戏项目上设置 xnb 文件?

    我从未找到任何使 xnb 文件起作用的教程 他们都使用非Windows Phone 8 Win 8 Metro等 方式 有人可以指导我使我的 xnb 文件在 MonoGame Windows Phone 8 游戏项目中可用吗 因为我在谷歌上
  • 声明模板类的模板友元函数

    我有一个类模板Obj和一个函数模板make obj Obj has a private定义了单个构造函数 它引用要绑定到的模板化类型 template