如何捕获构造函数的原型?

凯文·史塔拉

通过使用可变参数模板,我可以轻松地捕获和枚举方法或函数的参数:

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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何在维护原型链的同时在javascript中使用代理来捕获构造函数?

如何捕获构造函数异常?

如何找到原型链中的构造函数的根原型构造函数?

JavaScript:构造函数与原型

函数构造函数-使用原型添加函数会给出-未捕获的SyntaxError:意外令牌{

函数的原型属性如何影响对象的构造函数属性?

如何使构造函数参数可用于原型函数JavaScript

如何使用webpack添加变量构造函数的原型函数

构造函数与原型内部的函数

C ++:如何捕获从构造函数引发的异常?

如何为这种类型的构造函数创建原型?

如何使用未分配的属性创建Javascript构造函数/原型?

C++如何制作这种构造函数的原型?

C ++构造函数原型参数

原型调用构造函数运行

Javascript原型对象构造函数

在构造函数原型上定义的方法如何访问Javascript构造函数中的实例成员?

如何在构造函数旁边同时包含原型和非原型对象文字?

如何从构造函数中捕获异常而不处理整个函数?

使函数原型成为构造函数本身

从对象构造函数调用原型定义的函数

设置函数构造函数原型(例如)

原型链中的函数解析如何对Object.prototype作为构造函数起作用

如何设置函数的原型

如何从C ++中的构造函数中捕获异常

如何在构造函数中捕获异步方法的异常?

如何从Node.js中的构造函数发出/捕获事件?

如何捕获“无错误:未调用 PDO 构造函数”

如何从类构造函数中捕获事件触发