我使用函数指针的结构来实现不同后端的接口.签名非常不同,但返回值几乎都是void,void*或int.
struct my_interface {
void (*func_a)(int i);
void *(*func_b)(const char *bla);
...
int (*func_z)(char foo);
};
Run Code Online (Sandbox Code Playgroud)
但是后端不需要支持每个接口函数的功能.所以我有两种可能性,第一种选择是在每次调用之前检查指针是否为NULL.我不太喜欢这样,因为可读性和因为我担心性能影响(但我没有测量它).另一种选择是具有虚函数,对于极少数情况,接口函数不存在.
因此,我需要为每个签名都使用一个虚函数,我想知道是否有可能只有一个用于不同的返回值.并将其转换为给定的签名.
#include <stdio.h>
int nothing(void) {return 0;}
typedef int (*cb_t)(int);
int main(void)
{
cb_t func;
int i;
func = (cb_t) nothing;
i = func(1);
printf("%d\n", i);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我用gcc测试了这段代码,它确实有效.但它是否理智?或者它可以破坏堆栈还是会导致其他问题?
编辑:感谢所有答案,经过一番深入阅读后,我现在学到了很多关于调用约定的知识.并且现在可以更好地理解引擎盖下发生的事情.
如果我有一个包含任意形状或大小的n个Visual对象的Canvas,我将如何以编程方式突出显示/概述Visual对象?
WPF中有内置的东西可以帮助我吗?
我想要一个批处理文件来启动两个单独的程序然后关闭命令行窗口.实际上,为了澄清,我正在使用两个不同的URL启动Internet Explorer.
到目前为止,我有这样的事情:
start "~\iexplore.exe" "url1"
start "~\iexplore.exe" "url2"
Run Code Online (Sandbox Code Playgroud)
我得到的是Internet Explorer的一个实例,只加载了第二个URL.似乎第二个正在取代第二个.我似乎记得一种语法,我将加载一个新的命令行窗口并传递命令以在加载时执行,但无法找到引用.
作为问题的第二部分:什么是一个很好的参考URL,以保持您编写快速批处理文件所需的时间?
编辑:我已经标记了答案,因为它确实有效.我现在打开两个窗口,每个URL一个.(谢谢!)有趣的是,如果没有使用原始语法的/ d方法,我会根据是否打开预先存在的Internet Explorer实例得到不同的结果.
所以C#现在允许你用来default(Foo)
获得一个认可的"未填充"/空类的实例 - 我不确定它是否完全相同new Foo()
.许多库类还实现了一个Foo.Empty
属性,该属性返回一个类似的实例.当然,任何参考类型都可以指向null
.那真的,有什么区别?什么时候是对还是错?什么更一致,或表现更好?在检查对象在概念上是否"未准备好黄金时间"时,我应该使用哪些测试?不是每个人都有Foo.IsNullOrEmpty()
.
是否有库或可接受的方法来清理html页面的输入?
在这种情况下,我有一个只有姓名,电话号码和电子邮件地址的表单.
代码必须是C#.
例如:
"<script src='bobs.js'>John Doe</script>"
应该成为 "John Doe"
在form.Form
验证用户输入值后,我将它们传递给单独的(外部)进程以进行进一步处理.此外部进程可能会在值中发现更多错误.
有没有办法将这些错误注入已经验证的表单中,以便通过常用的表单错误显示方法显示它们(或者有更好的替代方法)?
一个建议是在表单验证中包含外部处理,这不是理想的,因为外部流程不仅仅需要验证.
如何将其他信息传递给返回项集合的服务方法?我将尝试解释我的意思,我在表单上有2个文本框,我需要根据数据库中的特定帐户ID填写名称.所以,我需要将一个整数传递给getNamesForDropDown方法.我无法弄清楚要做什么,所以我做错了,并使用CompletionSetCount实际传递了我需要的信息:
[System.Web.Services.WebMethod]
[System.Web.Script.Services.ScriptMethod]
public string[] getNamesForDropDown(string prefixText, int count)
{
String sql = "Select fldName From idAccountReps Where idAccount = " + count.ToString();
//... rest of the method removed, this should be enough code to understand
//... the evil wrongness I did.
}
Run Code Online (Sandbox Code Playgroud)
在我的正面aspx文件中,我根据用户当前在该页面上查看的帐户ID设置了CompletionSetCount.
<ajaxtk:AutoCompleteExtender
runat="server"
ID="AC1"
TargetControlID="txtAccName"
ServiceMethod="getNamesForDropDown"
ServicePath="AccountInfo.asmx"
MinimumPrefixLength="1"
EnableCaching="true"
CompletionSetCount='<%# Eval("idAccount") %>'
/>
Run Code Online (Sandbox Code Playgroud)
所以,这绝对是一种错误的方式......什么是正确的方法?
.NET中是否有内置机制来匹配正则表达式以外的模式?我想使用UNIX样式(glob)通配符匹配(*=任何数字的任何字符).
我想将它用于面向最终用户的控件.我担心允许所有RegEx功能会非常混乱.
标准VBA编辑器中是否有工具,方法或设置来警告已经Dim
'med,但没有被使用的变量?
除了在技术规范中粘贴WDSL之外,在开始编码之前,有哪些建议的方法来记录WCF Web服务?
c# ×4
.net ×1
asp.net ×1
batch-file ×1
c ×1
constructor ×1
conventions ×1
django ×1
django-forms ×1
excel ×1
excel-vba ×1
glob ×1
pointers ×1
variables ×1
vba ×1
vbe ×1
wcf ×1
web-services ×1
wpf ×1