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