gpt4 book ai didi

c++ - 使用依赖于模板参数的参数编写模板类的构造函数

转载 作者:行者123 更新时间:2023-11-27 22:39:07 25 4
gpt4 key购买 nike

考虑以下两个具有接受截然不同的参数集的构造函数的类。

class A {
public:
A(int x, double y) {
//do something
}
};

class B {
public:
B(const std::vector<bool>& x) {
//do something
}
};

现在,我想编写一个类模板 TpC,它将有一个对象(可能是 A 或 B 或其他对象)。换句话说,我希望能够使用以下内容:

int x;
double y;
std::vector<bool> z;
TpC<A> obj_a (x, y);
TpC<B> obj_b (z);

如何为 TpC 编写依赖于 A 和 B 构造函数参数的构造函数?编写类似特征/策略的内容来告诉 TpC 每个特定特化的参数应该是什么是可以接受的。

最佳答案

您可以使用 parameter pack 编写模板构造函数对于 TpC。 (正如评论所建议的那样,我使用 SFINAE 来约束模板,否则它可能比复制构造函数更好地匹配。从我发布的链接中查看整个代码片段。)

template <typename T, typename... U>
struct my_is_same {
constexpr static bool value = false;
};
template <typename T1, typename T2, typename... U>
struct my_is_same<T1, T2, U...> {
constexpr static bool value = std::is_same_v<T1, std::remove_cvref_t<T2>>;
};
template <typename T, typename... U>
inline constexpr bool my_is_same_v = my_is_same<T, U...>::value;

template <typename T>
class TpC {
T t;
public:
template <typename... Args, typename = std::enable_if_t<
!my_is_same_v<TpC, Args...> &&
std::is_constructible_v<T, Args&&...>
>>
TpC(Args&& ... args) : t(std::forward<Args>(args)...) {}
};

然后

int x;
double y;
std::vector<bool> z;
TpC<A> obj_a (x, y);
TpC<B> obj_b (z);

LIVE

关于c++ - 使用依赖于模板参数的参数编写模板类的构造函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50492960/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com