通过使用可变参数模板,我可以轻松地捕获和枚举方法或函数的参数:
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模板添加一个create方法,然后仅使用参数列表即可调用它,并且可能会发生新的MyClass(p1,p2,p3)。
但是,对于C ++ 17来说,似乎没有一种方法可以像我在C ++ 03中那样获得构造函数的类型,也没有像在C ++ 17中的函数那样获得构造函数的类型。有没有办法做到这一点?
谢谢
构造函数没有类型。您是否注意到在声明构造函数时不允许编写返回类型?
不幸的是,没有办法获得指向构造函数的函数指针。您的“ C ++ 03”解决方案不是标准的,并且GCC 3.3是一个非常老的编译器。那时,GCC拥有许多不可移植的扩展,其中大部分已被删除。
您需要找到一种不同的方式来做您想做的实际事情。正如对问题的评论中指出的那样,通用代码通常不需要“知道”构造函数的签名。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句