在不知道名称的情况下访问函数参数
Is accessing function parameters without knowing names possible
我想知道是否可以在不知道所有参数名称的情况下访问成员函数的参数列表(但知道所有参数类型的每个细节)。请参阅下面的代码:
struct TypeA
{
int a;
int b;
};
class TypeB
{
public:
string mSth;
char* mPtr;
};
class SomeClass
{
public:
inline void SomeFunc(struct TypeA, TypeB&)
{
// how to access the parameters here??
// if no parameter names are given??
}
};
我为什么要这样做是因为我的代码是由某个工具生成的,并且每次该工具生成时,它都会为SomeClass::SomeFunc
的参数列表提供不同的名称。
例如,这次是inline void SomeFunc(struct TypeA param1, TypeB& param2)
,而下一次可能是inline void SomeFunc(struct TypeA param3, TypeB& param4)
。
而且我不想仅仅因为参数名称已更改而重写函数体。
不能访问函数中的未命名参数。
问题的解决方案是改进您的不良工具或放弃它。
如果SomeFunc
没有重载,你可以以有限的方式访问这些类型,并且你知道函数的名称。 您可以生成包含参数类型列表的类型包。
但是,您无法访问参数本身。
解决问题的最简单方法可能是将函数转发到您编写的另一个具有稳定参数名称的函数。 那么只需要重写"包装"函数,不需要重写包装的函数。
inline void SomeFunc(struct TypeA random_name_77, TypeB& random_name_82)
{
auto impl=[this](struct TypeA&& p1, TybeB& p2){
// your code goes here
};
impl(
std::forward<decltype(random_name_77)>(random_name_77),
std::forward<decltype(random_name_77)>(randon_name_82)
);
}
现在,当工具生成的参数名称更改时,只需要更改尾部(调用impl
的部分)。 impl
中的新参数名称是您选择的任何内容。
&&
和std::forward<decltype(var)>(var)
是实现完美转发和避免虚假副本的方法。
相关文章:
- 如何在函数外部访问函数中局部变量的值?
- UChildActorComponent的ChildActorClass中的访问函数
- 访问函数变体时"Invalid conversion"错误
- 在将向量作为参数传递给函数后,我无法访问函数中向量的元素
- 在64位DLL中访问函数的错误
- 访问函数中 const char *arr[] 的元素
- 访问函数的调用方类型
- 访问函数中的使用声明:与范围相关的问题
- 通过 -> 语法 c++ 从指针访问函数
- 在函数中使用 const 引用参数访问函数中成员的最佳实践 C++.
- 从另一个文件(C++,QT)访问函数未解析的外部
- 如何从主(C )访问函数中的值
- 访问函数 c++ 中的全局变量
- C++ GoogleTest 使用夹具 - 无法访问函数指针定义
- 在不知道名称的情况下访问函数参数
- C++:直接访问器或类内的访问函数
- 无法从对象访问函数
- 类的2D矢量在访问函数时出错
- 为什么在C++中访问函数时没有对象
- 我无法使用指针数组从main访问函数(在类中)