假设我有3个类,如下所示

我想创建一个模板函数来代替object类中的函数,它可以代替object类中的两个函数。我遇到的问题是我不知道如何允许模板函数接受modifier_1或modifier_2类型的参数,有没有办法做到这一点?
谢谢。
发布于 2020-04-14 19:19:36
我可以想出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;
}
};https://stackoverflow.com/questions/61205814
复制相似问题