c++ - 如何避免在类的构造函数中需要两次提供模板?
问题描述
我有以下两个课程:
template<std::size_t Num>
class Foo
{
public:
Foo(const std::array<int,Num>& nums)
:
m_nums(nums){}
protected:
const std::array<int,Num>& m_nums;
};
template<typename... Foos>
class Bar
{
public:
Bar(Foos... foos)
:
m_foos(std::make_tuple(foos...))
{
}
protected:
std::tuple<Foos...> m_foos;
};
我会这样使用:
int main()
{
std::array<int,2> nums1 = {0,1};
std::array<int,1> nums2 = {0};
Bar<Foo<2>,Foo<1>> bar(Foo<2>(nums1), Foo<1>(nums2));
return 0;
}
我怎样才能避免需要指定Foo<2>
和Foo<1>
两次?我试过Bar<> bar(Foo<2>(nums1), Foo<1>(nums2));
了,但没有编译。
解决方案
使用 CTAD,隐式扣除指南已经为您提供:
Bar bar{Foo<2>(nums1), Foo<1>(nums2)};
(请注意,如果你使用括号而不是花括号,你会在这里遇到最麻烦的解析。)
推荐阅读
- cypress - Cypress visit() 失败:TypeError: Invalid character in header content ["cookie"]
- python - 在 Python 中将列表对转换为键值对
- django - Django + Python 社交身份验证:如何为 GitHub Enterprise 配置 OAuth?
- css - 是否有可能将所有:悬停(css)用作:活动?(无需为每个元素编写)
- automation - Blue Prism - 无法窥探元素 - 浏览器 Firefox
- cassandra - Cassandra 机器要求:通用或 IO 密集型
- elasticsearch - 如何在 Elasticsearch 聚合中获取最小和最大日期之间的小时数?
- php - 查询数据库中的数据以显示帖子
- docker - Docker 服务卷 CIFS 网络驱动器
- ruby - SciRuby Jupyter 笔记本输出表和 html