【发布时间】:2018-07-21 04:45:40
【问题描述】:
我目前正在尝试实现一个通用初始化程序来减少我们代码库的大小。然而,在某一时刻,我的代码看起来像这样:
template<typename T, typename Arg1, typename Arg2>
T* ManageDevice(Arg1 arg1, Arg2 arg2)
{
auto device = new T{ arg1, arg2 };
// More operations on device
return device;
}
template<typename T, typename Arg1, typename Arg2, typename Arg3>
T* ManageDevice(Arg1 arg1, Arg2 arg2, Arg3 arg3)
{
auto device = new T{ arg1, arg2, arg3 };
// More operations on device
return device;
}
template<typename T, typename Arg1, typename Arg2, typename Arg3, typename Arg4>
T* ManageDevice(Arg1 arg1, Arg2 arg2, Arg3 arg3, Arg4 arg4)
{
auto device = new T{ arg1, arg2, arg3, arg4 };
// More operations on device
return device;
}
这开始变得不那么优雅了。据我了解,可变参数模板似乎是解决此问题的方法。但我不明白这如何适用于我的情况。
我更喜欢这样的:
T* ManageDevice(Args... args)
{
// The function I want
// Unpack as a std::initializer_list
auto allArguments = unpackAll();
auto device = new T{ allArguments };
// More operations on device
return device;
}
关于如何实现 unpackAll() 有什么建议吗? 谢谢。
【问题讨论】:
-
为什么不直接传呢?
new T{ args...};,你可能想设置转发。
标签: c++ c++11 templates variadic-templates