在python中,有一个名为getattr的函数,它看起来像这样:
class MyObject():
def __init__(self):
self.xyz = 4
obj = MyObject()
getattr(obj, 'xyz')
Run Code Online (Sandbox Code Playgroud)
对getattr的调用将返回4.
在C++(非Visual C++)中有类似的方法吗?
是否有任何具有此功能的库我可以使用字符串查找对象的成员变量?
我试图找到一种方法来查找我无法更改的C++类中的公共数据成员.所以我不能使用地图将字符串文字映射到值.也许像宏的'unstringify'?
在 C++ 中,有没有办法定义一个打印每个结构的函数?我的意思是,在我们的项目中,有很多结构体;我有时需要打印它们以进行调试。我希望它们可以轻松打印,而无需向每个结构添加友元 ostream 函数。
struct type{
string name;
int id;
}
type aType;
aType.name= sahin;
aType.id=10;
Run Code Online (Sandbox Code Playgroud)
该函数可以这样工作:
printStruct(aType);
{
name:sahin
id:10
}
Run Code Online (Sandbox Code Playgroud)
然后,如果可能的话,我需要一种打印结构向量的方法。类似于 js 中的 JSON.stringify。
python中的魔术方法真的很神奇。例如:
class DynMember:
def __getattr__(self, name: str):
def fn(self, **kwargs):
print(kwargs)
setattr(self.__class__, name, fn)
return lambda **x: fn(self, **x)
if __name__ == "__main__":
d = DynMember()
d.someFn(title="Greeting", description="Hello world!") # outputs {'title': 'Greeting', 'description': 'Hello world!'}
d.someFn(k1="value 1", k2="value 2") # outputs {'k1': 'value 1', 'k2': 'value 2'}
Run Code Online (Sandbox Code Playgroud)
有没有someFn
在DynMember
类。该方法是使用__getattr__
魔法方法和setattr
内置方法在类上设置的。这些方法非常强大,让类在 python 中创造奇迹。(仅用 40 行代码编写了一个 html 生成器)。如何在 C++ 中实现类似的东西?
我有一个包含许多命令行选项的代码库.目前,如果在命令行上传入命令,则每个命令行选项都与表中的函数指针一起存在于表中.
例如
static CommandFunction s_Commands[] =
{
{ "command1", Func1 },
{ "command2", Func2 },
{ "command3", Func3 },
etc...
};
Run Code Online (Sandbox Code Playgroud)
我的问题是,表格很大,而且功能在其他地方.我更喜欢命令的字符串住在每个函数旁边.
例如:
COMMAND_ARG("command1")
void Func1()
{
dostuff
...
}
COMMAND_ARG("command2")
void Func2()
{
dostuff
...
}
COMMAND_ARG("command3")
void Func3()
{
dostuff
...
}
Run Code Online (Sandbox Code Playgroud)
这可能吗?
我想声明一个模板如下:
template <typename T>
{
if objects of class T have method foo(), then
const int k=1
else
if class has a static const int L then
const int k=L
else
const int k=0;
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能做到这一点?一般来说,我想要一种基于T(或T中定义的typedef)属性设置静态consts的机制.
假设我有一个课程如下
class Rectangle{
public:
int height;
int width;
};
Run Code Online (Sandbox Code Playgroud)
如何在不手动说明cout<<a.height
或类似内容的情况下打印出该类成员的列表.换句话说,在不知道不同班级的成员的情况下,有没有办法让我打印出新班级的成员?
有没有办法将字符串作为c ++函数的输入参数并将其作为内部参数进行评估,例如结构名称或其他变量?
例如(用伪代码编写)
int myFunction(string nameStructure){
nameStructure.field = 1234
}
"带走"点是将输入字符串转换为代码中的变量.
标记
我有一些POD struct foo
; 假设是的struct foo { int x; unsigned y; }
.我希望能够struct foo
使用词典顺序进行比较- 当然是按照他们的字段顺序进行比较.也就是说,我希望所有的运营商<,==>等为工作struct foo
的
我可以用一些通用的方式做到这一点,而没有用任何反射巫术装饰我的结构定义- 而且没有拼写出所有那些操作符定义?或者是否有能力做到这一点太依赖"语言反思"的期望?
c++ ×8
boost ×1
class ×1
getattr ×1
if-statement ×1
object ×1
python ×1
reflection ×1
struct ×1
templates ×1