gpt4 book ai didi

c++ - 存储方法的返回类型和参数类型

转载 作者:太空狗 更新时间:2023-10-29 20:25:55 24 4
gpt4 key购买 nike

是否可以使用 decltype 确定和存储 SomeMethod 的返回类型(如果这是最好的方法,否则最好的方法是什么它)在编译时?

是否也可以使用相同的工具来存储 SomeMethod 的参数类型列表?

背后的想法是使用 getter 使它们可以从类外部轻松访问。

class SomeClass
{
public:
typedef [???] ProcRetType;
typedef [???] ProcArgTypeList;

public:
SomeClass() { }
~SomeClass() noexcept { }

SomeType SomeMethod( SomeType1 arg1, SomeType2 arg2 ) { }

// Data members
private:
};

最佳答案

对于返回类型,你可以使用decltype:

typedef decltype(SomeMethod(std::declval<SomeType1>(), std::declval<SomeType2>())) ProcRetType;

对于参数,您需要一个辅助特征。这也可以用于返回类型,如下所示:

template <class Func>
struct Helper;

template <class T, class R, class... Arg>
struct Helper<R (T::*)(Arg...)>
{
typedef std::tuple<Arg...> ArgTypes;
typedef R ReturnType;
};

然后像这样使用它:

typedef Helper<decltype(&SomeClass::SomeMethod)>::ReturnType ProcRetType;
typedef Helper<decltype(&SomeClass::SomeMethod)>::ArgTypes ProcArgTypeList;

我正在使用 std::tuple 来表示类型列表 - 其他表示也是可能的,例如 Boost.MPL .

您可能需要提供一些 Helper 的其他部分特化来解释 const 函数(可能还有 volatile 和旧式可变参数也适用于您)。

关于c++ - 存储方法的返回类型和参数类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22194968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com