【发布时间】:2014-01-12 03:14:36
【问题描述】:
这是将所有构造函数转发到成员数据结构的好方法吗?
template<typename VectorData>
class VectorFunctionality
{
VectorData data;
public:
VectorFunctionality() = default;
VectorFunctionality(const VectorFunctionality&) = default;
template<typename ...Args>
VectorFunctionality(Args... args) : data(std::forward<Args>(args)...) {};
};
VectorData 可以是 std::array、std::vector 等。 VectorFunctionality 继承了所有的 VectorData c'tors。 这有助于避免在 VectorFunctionality 中写入许多 c'tors,其他用于 std::array 和其他用于 std::vector。
【问题讨论】:
-
如果编译器支持 C++11 的构造函数继承,也许只使用
private继承,在构造函数中继承。免责声明:我还没有尝试过。 -
如果你这样不小心写了,那么
std::is_constructible<VectorFunctionality, Args...>::value对于Args...的任何选择都是正确的,这可能是不可取的。 -
也使用
VectorFunctionality(Args&&... args)隐式转发参数。在一般情况下,我不认为这提供了一个好的和简单的 API。用户不会轻易理解构造函数的使用,除非你有一个很好的文档
标签: c++ templates c++11 constructor