c++ - 如何捕获构造函数的原型(prototype)?

标签 c++ templates constructor function-prototypes

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

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/

相关文章:

c++ - 需要帮助理解概念 : why declare a function in header but define it in source file?

c++ - 即使使用用户定义的构造函数,编译器何时仍会生成默认构造函数?

javascript - JavaScript构造函数可以返回函数并保持继承吗?

java - 可以从构造函数调用 Private Final 方法吗?

c++ - 为什么 mt19937 的 STD 实现有双倍的 sizeof 作为 boost 版本?

c++ - 设置<字符串> : how to list not strings starting with given string and ending with `/` ?

c++ - 在带有 Visual Studio 的 Windows 上使用 ARPACK++

angularjs - 如何使用最新版本的 AngularJS 开始一个新项目?

c++ - 将成员函数指针传递给模板函数

c++ - 使用迭代器执行对象操作的函数