【发布时间】:2020-05-30 20:45:19
【问题描述】:
我有一些带有不同参数的函数(对于这个例子来说很简单):
int addNums(int a, int b) {
return a + b;
}
int squareNum(int a) {
return a * a;
}
我有一个模板类action,它有一个函数指针,最终将指向上述任何一个函数:
template<class T>
class action {
public:
std::string descriptionOfAction;
T functionPtr;
};
我有一个类user,它应该有某种形式的actions 容器:
class user {
public:
std::string name;
//container of actions
};
在main中,我定义并初始化了两个actions来对应上面列出的前两个函数:
action<int(*)(int, int)> addAction;
addAction.descriptionOfAction = "Add two numbers together";
addAction.functionPtr = addNums;
action<int(*)(int)> squareAction;
squareAction.descriptionOfAction = "Square a number";
squareAction.functionPtr = squareNum;
现在我想将这两个actions 插入到users 的actions 容器中:
user aUser;
aUser.name = "User's Name";
//insert "addAction" and "squareAction" to user's container of actions
因为模板,这些actions 不是同一类型。是否有现有类型的容器来容纳这些?如果没有,有没有办法在没有模板的情况下做类似的事情?理想情况下,当 user 在其容器中“使用”其中一个 actions 时,应该删除 action。
【问题讨论】:
-
当这些函数有不同的参数列表时,您希望如何使用它们?假设你可以做你想做的,用户怎么知道使用哪个参数列表?
-
std::variant呢?如果你可以使用 C++17。 -
在更原始的方法上,模板化标记联合..
标签: c++ templates containers function-pointers