我想將一組可變引數擴展為 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
uj5u.com熱心網友回復:
由于 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);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/448844.html
上一篇:來自非constexpr呼叫的constexpr結果
下一篇:C 中的從屬名稱是什么?
