【发布时间】:2012-07-21 06:32:45
【问题描述】:
我想为一堆功能相似的函数编写一个 C++ 包装器。但他们都有不同数量的论点。例如(假设 typeA、typeB 等是不同的 typedef 类型):
typeA func1 (typeB b, typeC c);
typeA func2 (typeB b, typeD d, typeE e);
这些是我想要为其编写包装器的函数(请注意,它们都有返回类型 typeA 和类型 B 的第一个参数)。所以我打算创建一个通用包装类并在构造函数中存储一个参数列表。我希望能够在下面调用一个看起来像“func”的函数:
class wrapper {
public:
wrapper (/*args - a list of arguments, including
a pointer to the actual function, and
the remaining arguments depending
on the function. */);
void func (typeB b, typeA &a);
}
所以,我想以这样一种方式编写 func,它可以调用任何函数(func1 或 func2),并将参数传递给构造函数。
我想知道是否有一种方法可以将 func1 或 func2 视为具有可变数量的参数。或者至少,如果在 C++ 中有一种方法,我可以输入一个函数和一个参数列表并获取 eval (function, argument_list)。
另一种方法是为每个函数编写一个包装器,我想避免但不反对。 (另外,我不介意解决方案是否涉及我不使用包装器类而是包装器函数)
【问题讨论】:
-
你熟悉 std::function,什么编译器和版本?提升可用吗?
-
你想用你的包装器完成什么?我不明白为什么要包装任何东西。
-
@Zac,我查看了 std::function。似乎我仍然需要指定确切数量的输入参数才能将其与另一个函数一起使用。我在 ubuntu 上工作。我在终端上运行了 g++ --version,它告诉我 4.6.1。是的。升压可用。我听说它可能对我想做的事情有用。
-
@Adam,我基本上有一堆以不同方式过滤点云的函数。我想用通用包装器将它们全部包装起来,这样它们在调用时看起来都一样。 (有代码要求以特定格式调用它们)。
-
目前还不清楚你想要什么。您提到的函数采用截然不同的参数,但您需要一个看似采用这些参数的子集并为两个函数提供通用接口的包装器。您描述的类似 Python 的 eval 在像 C++ 这样的编译语言中是不可能的,但绝对可以编写您想要的包装器。但我不清楚这是否值得,因为在我看来,包装器就像例程本身一样。
标签: c++ wrapper variadic-functions