【发布时间】:2019-10-07 18:07:24
【问题描述】:
我有以下例子:
#include <array>
struct A {
const char* str;
const char* str2;
};
template<size_t N>
struct As {
std::array<A,N> elems_;
};
template<class... Args>
As(Args...)->As<sizeof...(Args)>; //<-- NOTE: deduction guide !
constexpr static As as{A{"a","b"}, A{"1","2"}};//<-- 'retyping' A here
int main() {
return as.elems_.size();
}
虽然此代码有效,但我想避免在聚合列表中“重新输入”A,但如果我将其排除在外,则演绎指南将失败:"cannot deduce template arguments for 'As'"(我想这是有道理的)。也许解决这个问题的一种方法是手写我需要的任何数量的推导指南,从那时起我可以在每个推导指南中写A类型(即:我需要的容器的每个尺寸都推导一个)。
【问题讨论】:
-
初始化时多加一组{}好吗?
-
@Columbo 我想这可能没问题 - 无论如何如果找到使用它的解决方案可能会帮助其他用户。
-
{..}没有类型,所以如果A被省略,Args...就无法推导出来。
标签: c++ language-lawyer c++17 constexpr aggregate-initialization