constexpr 将构造函数参数包扩展到成员数组 (C++11)
Constexpr expand constructor parameter pack into member array (C++11)
我想将一组可变参数扩展为 C++11 中的结构成员。我的方法如下:
template <typename... Ts>
struct cxpr_struct
{
constexpr cxpr_struct(Ts... Args) : t_(Args...) {}
std::array<int, sizeof...(Ts)> t_;
};
int main()
{
cxpr_struct(10, 20, 30);
}
但是,这会产生以下错误:
<source>:208:16: error: missing template arguments before '(' token
208 | cxpr_struct(10, 20, 30);
|
我知道我的代码有缺陷。例如。数组的类型不是由 Ts 确定的(我该怎么做?)。但是我将如何以正确的方式做到这一点?编译器真的不能推导模板参数吗?
编辑:我必须使用 C++11
由于 c++11,你必须使用类似的东西:
template <typename... Ts>
struct cxpr_struct
{
constexpr cxpr_struct(Ts... args) : t_{args...} {}
std::array<int, sizeof...(Ts)> t_;
};
template<typename... Ts>
cxpr_struct<Ts...> build(Ts...args){
return cxpr_struct<Ts...>(args...);
}
int main()
{
auto obj = build(10, 20, 30);
}
或更好:
template <unsigned Size>
struct cxpr_struct
{
template<typename... Ts>
constexpr cxpr_struct(Ts... args) : t_{args...} {}
std::array<int, Size> t_;
};
template<typename... Ts>
cxpr_struct<sizeof...(Ts)> build(Ts...args){
return cxpr_struct<sizeof...(Ts)>(args...);
}
int main()
{
auto obj = build(10, 20, 30);
}
我想将一组可变参数扩展为 C++11 中的结构成员。我的方法如下:
template <typename... Ts>
struct cxpr_struct
{
constexpr cxpr_struct(Ts... Args) : t_(Args...) {}
std::array<int, sizeof...(Ts)> t_;
};
int main()
{
cxpr_struct(10, 20, 30);
}
但是,这会产生以下错误:
<source>:208:16: error: missing template arguments before '(' token
208 | cxpr_struct(10, 20, 30);
|
我知道我的代码有缺陷。例如。数组的类型不是由 Ts 确定的(我该怎么做?)。但是我将如何以正确的方式做到这一点?编译器真的不能推导模板参数吗?
编辑:我必须使用 C++11
由于 c++11,你必须使用类似的东西:
template <typename... Ts>
struct cxpr_struct
{
constexpr cxpr_struct(Ts... args) : t_{args...} {}
std::array<int, sizeof...(Ts)> t_;
};
template<typename... Ts>
cxpr_struct<Ts...> build(Ts...args){
return cxpr_struct<Ts...>(args...);
}
int main()
{
auto obj = build(10, 20, 30);
}
或更好:
template <unsigned Size>
struct cxpr_struct
{
template<typename... Ts>
constexpr cxpr_struct(Ts... args) : t_{args...} {}
std::array<int, Size> t_;
};
template<typename... Ts>
cxpr_struct<sizeof...(Ts)> build(Ts...args){
return cxpr_struct<sizeof...(Ts)>(args...);
}
int main()
{
auto obj = build(10, 20, 30);
}