c++ - 是否可以编写可变参数模板构造函数来初始化类/结构的所有成员?
问题描述
是否有可能实现这一点:
struct S
{
int a;
std::string s;
template<typename... Args>
S(Args... args)
: // what next?
{
// what next?
}
};
或者有没有其他方法可以实现(类似)这个?(标准::元组?)
解决方案
您可以使用std::tie
创建对数据成员的左值引用的元组,并分配基于传递的参数创建的另一个元组的内容:
struct S {
int a;
std::string s;
template<typename... Args>
S(Args&&... args) {
static_assert(std::is_same_v< std::tuple<int,std::string>, std::tuple<std::decay_t<Args>...> >);
std::tie(a,s) = std::forward_as_tuple(std::forward<Args>(args)...);
}
};
int main(){
std::string str("x");
S s(10,str); // ok
S s4(1,std::string("x")); // ok
//S s2(10,"x"); // fails
//S s3(10,0); // fails
推荐阅读
- java - 使用 json-simple 时解析 JSON 字符串并保留键数据顺序,无需手动构造 HashMap
- c++ - 在 Windows 上的 CodeBlocks 中设置 OpenGL
- regex - 将正则表达式或 htaccess url.com/city-randomcity/ 重定向到 url.com/randomcity/
- c# - 无法写入自定义事件日志
- java - 即使应用程序未运行,如何每天更新 TextView?
- python - 使用 LidarLite-python 代码进行距离测量
- python - AttributeError:“unicode”对象没有属性“css”
- join - 如何在mysqli中加入一个表,然后在表内加入表?
- node.js - 无法在 nodejs 上启动服务器
- python - 在自定义类型映射中重用 SWIG 映射