如果我有一个看起来像这样的原型:
function(float,float,float,float)
Run Code Online (Sandbox Code Playgroud)
我可以传递这样的值:
function(1,2,3,4);
Run Code Online (Sandbox Code Playgroud)
所以,如果我的原型是这样的:
function(float*);
Run Code Online (Sandbox Code Playgroud)
有什么办法可以达到这样的目的吗?
function( {1,2,3,4} );
Run Code Online (Sandbox Code Playgroud)
只是在没有创建临时变量的情况下寻找一种懒惰的方法,但我似乎无法确定语法.
我正在使用Beej的网络指南,并遇到了一个别名问题.他提出了一个函数来返回特定结构的IPv4或IPv6地址:
1 void *get_in_addr( struct sockaddr *sa )
2 {
3 if (sa->sa_family == AF_INET)
4 return &(((struct sockaddr_in*)sa)->sin_addr);
5 else
6 return &(((struct sockaddr_in6*)sa)->sin6_addr);
7 }
Run Code Online (Sandbox Code Playgroud)
这会导致GCC 在第3行为sa吐出严格别名错误.据我所知,这是因为我这样调用这个函数:
struct sockaddr_storage their_addr;
...
inet_ntop(their_addr.ss_family,
get_in_addr((struct sockaddr *)&their_addr),
connection_name,
sizeof connection_name);
Run Code Online (Sandbox Code Playgroud)
我猜测别名与their_addr变量是类型的事实有关,sockaddr_storage而另一个不同类型的指针指向同一个内存.
就是要解决这个症结的最佳方式sockaddr_storage,sockaddr_in以及sockaddr_in6组成工会?看起来这应该是网络中的一个很好的领域,我只是找不到任何有最佳实践的好例子.
此外,如果有人能够准确解释别名问题发生的位置,我会非常感激.
尝试通过ResourcesPlugin获取工作区时出现此错误:
java.lang.IllegalStateException: Workspace is closed.
at org.eclipse.core.resources.ResourcesPlugin.getWorkspace(ResourcesPlugin.java:339)
Run Code Online (Sandbox Code Playgroud)
生成它的代码是:
IWorkspace ws = ResourcesPlugin.getWorkspace();
Run Code Online (Sandbox Code Playgroud)
你能帮忙解决这个问题吗?
我正在为C++构建一个GUI类,并处理很多指针.一个示例电话:
mainGui.activeWindow->activeWidget->init();
Run Code Online (Sandbox Code Playgroud)
我的问题是我想将activeWidget指针转换为另一种类型. activeWidget的类型为GUI_BASE.派生自BASE我有其他类,如GUI_BUTTON和GUI_TEXTBOX.我想将activeWidget指针从GUI_BASE转换为GUI_TEXTBOX.我认为它看起来像这样:
(GUI_TEXTBOX*)(mainGui.activeWindow->activeWidget)->function();
Run Code Online (Sandbox Code Playgroud)
这不起作用,因为编译器仍然认为指针是GUI_BASE类型.但是,以下位代码确实有效:
GUI_TEXTBOX *textbox_pointer;
textbox_pointer = (GUI_TEXTBOX*)mainGui.activeWindow->activeWidget;
textbox_pointer->function();
Run Code Online (Sandbox Code Playgroud)
我希望我的问题只是语法问题.谢谢您的帮助 :)
在我们的应用程序中,我们有一个在运行时接收属性的对象 例如,要向对象添加浮点数:
my_object->f("volume") = 1.0f;
Run Code Online (Sandbox Code Playgroud)
检索卷的工作方式相同:
cout << my_object->f("volume") << endl;
Run Code Online (Sandbox Code Playgroud)
在内部,这由字符串映射到它们各自的类型.每种类型都有自己的访问方法和地图.它看起来像这样:
map<string, float> my_floats;
map<string, int> my_ints;
map<string, void *> my_void_pointers;
Run Code Online (Sandbox Code Playgroud)
哦,可怕的void *.有时我们需要向对象添加类或函数.我们没有为每种可能的类型设置单独的地图,而是选择了void *地图.我们遇到的问题是清理.目前,我们保留了void *指向这些"悬空"对象的每种类型的列表,并在必要时在这些单独的列表上调用清理函数.
我不喜欢必须使用void *它以及正确清理所需的所有额外注意力.有没有更好的方法在运行时在对象中存储任意类型,可以通过字符串映射访问,并仍然可以通过析构函数自动清理?