我可以使用可变参数模板轻松捕获和枚举方法或函数的参数,例如:
template<typename RT, typename ...Args>
class MyFunctor< RT (*)(Args ... args)>
{
//Count the number of arguments
static constexpr int const arity=sizeof ...(Args);
//Create something to store the arguments in
std::tuple<Args...> _arguments;
}
然后我可以创建模板方法,这些方法可以遍历参数列表并最终使用 _agrument 元组调用指向实际函数的指针。
我知道构造函数是无名的,但它们也是无类型的吗?有没有办法获取构造函数的“类型”,以便我可以做一些类似于我可以用函数和方法做的事情?
在 C++ 03 中,我可以通过以下方式捕获构造函数的类型(使用 GCC 3.3):
TypeDefT< typeof( MyClass::MyClass(int i) ) *>
通过将指针语法放在 typeof() 语句之后,我可以将构造函数签名视为普通函数指针的类型。
然后我会向 FunctionPointer 模板添加一个创建方法,然后可以仅使用参数列表调用该方法,并且可能会发生 new MyClass( p1, p2, p3 )。
但是,似乎在 C++ 17 中,没有办法像我在 C++ 03 中那样获取构造函数的类型,在 C++ 17 中似乎也无法像在 C++ 17 中那样获取构造函数的类型。有没有办法做到这一点?
谢谢
最佳答案
构造函数没有类型。您是否注意到在声明构造函数时不允许编写返回类型?
不幸的是,没有办法得到像构造函数指针这样的东西。您的“C++03”解决方案不是标准的,GCC 3.3 是一个非常的编译器;在那些日子里,GCC 有许多不可移植的扩展,其中大部分已被删除。
您需要找到一种不同的方式来完成您想做的实际事情。正如问题的评论中所指出的,通用代码通常不需要“知道”构造函数的签名。
关于c++ - 如何捕获构造函数的原型(prototype)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55962432/