我在这里读到在Objective-C之前学习C?
通常我会用纯C代码替换一些Obj-C代码(毕竟你可以根据需要混合它们,Obj-C方法的内容可以完全是纯C代码)
这是真的?
是否有可能纯粹使用C编程语言构建iPhone应用程序?
我希望能够内省一个C++类的名称,内容(即成员及其类型)等.我在这里说的是原生C++,而不是托管C++,它有反射.我意识到C++使用RTTI提供一些有限的信息.哪些额外的库(或其他技术)可以提供此信息?
我有一个文件:Base.h
class Base;
class DerivedA : public Base;
class DerivedB : public Base;
/*etc...*/
Run Code Online (Sandbox Code Playgroud)
和另一个文件:BaseFactory.h
#include "Base.h"
class BaseFactory
{
public:
BaseFactory(const string &sClassName){msClassName = sClassName;};
Base * Create()
{
if(msClassName == "DerivedA")
{
return new DerivedA();
}
else if(msClassName == "DerivedB")
{
return new DerivedB();
}
else if(/*etc...*/)
{
/*etc...*/
}
};
private:
string msClassName;
};
/*etc.*/
Run Code Online (Sandbox Code Playgroud)
有没有办法以某种方式将此字符串转换为实际类型(类),以便BaseFactory不必知道所有可能的Derived类,并为每个类都有if()?我可以用这个字符串生成一个类吗?
我认为这可以通过Reflection在C#中完成.C++中有类似的东西吗?
为什么反射可以在C#中访问类的受保护/私有成员?
这对于全班来说是不安全的,为什么反思会给予这种力量?这是反模式吗?
在C++中,有没有办法从它的指针中获取函数签名/名称?
void test(float data) {}
cout << typeid(&test).name();
Run Code Online (Sandbox Code Playgroud)
我想使用这些数据进行日志记录.
假设我们在C++中有一个结构:
struct foobar
{
int age;
bool hot;
String name
};
Run Code Online (Sandbox Code Playgroud)
有没有办法以编程方式查询上面的结构来提取其实例成员?例如:
String[] members = magicClass.getInstanceMembers(foobar);
Run Code Online (Sandbox Code Playgroud)
成员会有["age", "hot", "name"]它的价值观.
可能?我问的原因是因为我的结构随着时间的推移发生了变化(添加/删除了变量).我希望能够使用此保存的数据创建自动生成Lua文件.
谢谢
前段时间,我为c和c ++程序制作了这个漂亮的断言宏
#define ASSERT(truthy, message) \
if (!(truthy)) \
{\
cout << message << " on line " << __LINE__ << " in file " << __FILE__ << ". Check was " << #truthy << endl;\
}
Run Code Online (Sandbox Code Playgroud)
Scatter ASSERT调用整个代码,只要truthy值不真实,它就会发出警告!在开发过程中非常方便,以提醒您潜在的错误.
前
ASSERT(filesFound > 0, "Couldn't find any files, check your path!");
Run Code Online (Sandbox Code Playgroud)
当filesFound为0时,宏将打印出来
找不到任何文件,检查你的路径!在文件openFiles.c的第27行.检查是filesFound> 0
现在,我希望它打印,给我更多相关信息,是传递给truthy参数的任何变量的值.像这样
找不到任何文件,检查你的路径!在文件openFiles.c的第27行.检查是filesFound> 0,filesFound是0
我想知道,这似乎是类似lisp的领域,是否有任何黑魔法预处理可用于评估变量和函数的值,而无需评估truthy语句?
我假设很失望.
如果标题不清楚,我会尽量澄清我的要求:
想象一下,我有一个名为counter的变量,我知道我可以通过以下方式看到它的当前值:
std::cout << counter << std::endl;
Run Code Online (Sandbox Code Playgroud)
但是,假设我有很多变量,我不知道在运行之前我想要查看哪些变量.
有没有人知道我可以通过使用其名称来获取变量值的方法,例如:
std::cout << valueOf("counter") << std::endl;
Run Code Online (Sandbox Code Playgroud)
我觉得能够做到这一点可能会使调试大型复杂项目变得更容易.
在此先感谢您的时间.
更新:所提供的所有答案都是有效且有用的,但重点是C++中不存在反射(并且在阅读建议的链接之后很明显为什么).
我正在看以下问题:
我得到格式如下的字符串:
functionname_parameter1_parameter2_parameter3
otherfunctionname_parameter1_parameter2
.
.
.
Run Code Online (Sandbox Code Playgroud)
我想用给定的参数调用函数.所以假设我有一个功能测试:
void test(int x, float y, std::string z) {}
Run Code Online (Sandbox Code Playgroud)
我收到一条消息:
test_5_2.0_abc
Run Code Online (Sandbox Code Playgroud)
那么我想像这样自动调用函数测试:
test(5, 2.0, "abc");
Run Code Online (Sandbox Code Playgroud)
您是否有任何关于如何在C++中实现此目的的提示?
c++ ×7
reflection ×4
c ×3
function ×2
binding ×1
c# ×1
cocoa-touch ×1
factory ×1
inheritance ×1
ios ×1
macros ×1
objective-c ×1
parsing ×1
sfinae ×1
string ×1
templates ×1
variables ×1