gpt4 book ai didi

c++ - 在C++中的多个类中使用模板类

转载 作者:行者123 更新时间:2023-12-02 10:03:55 25 4
gpt4 key购买 nike

假设我有3个类,如enter image description here所示

除了创建对象类中的函数外,我想创建一个模板函数来代替对象类中的两个函数。我遇到的问题是我不知道如何允许模板函数接受类型为Modify_1或类型Modify_2的参数。有没有办法做到这一点?

谢谢。

最佳答案

我可以想到3种可能适合您想要的解决方案。

1。

class object : public modifier_1, public modifier_2
{
private:
int x{};
template<class Modifier>
void modify_by_modifier_helper(Modifier mod, int modifier)
{
x += modifier;
}
public:
object() = default;
void modify_by_modifier(modifier_1 mod, int modifier)
{
modify_by_modifier_helper(mod, modifier);
}

void modify_by_modifier(modifier_2 mod, int modifier)
{
modify_by_modifier_helper(mod, modifier);
}
};

2。
#include <type_traits>

class object : public modifier_1, public modifier_2
{
private:
int x{};
public:
object() = default;

template<class Modifier>
void modify_by_modifier(Modifier mod, int modifier)
{
static_assert(std::is_same_v<std::decay_t<Modifier>, modifier_1> ||
std::is_same_v<std::decay_t<Modifier>, modifier_2>,
"Modifier must be modifier_1 or modifier_2")

x += modifier;
}
};

3。
#include <type_traits>

class object : public modifier_1, public modifier_2
{
private:
int x{};
public:
object() = default;

template<class Modifier>
std::enable_if_t<std::is_same_v<std::decay_t<Modifier>, modifier_1> ||
std::is_same_v<std::decay_t<Modifier>, modifier_2>, void>
modify_by_modifier(Modifier mod, int modifier)
{
x += modifier;
}
};

关于c++ - 在C++中的多个类中使用模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61205814/

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