在C#程序中,我有一个String变量,我想将它与一百个预定义(硬编码)字符串文字进行比较,以便我知道它是否匹配任何这些预定义的字符串.
我当然可以编写一个switch或一个if-else ifs 链但这种方式字符串与控制语句和IMO交错,这降低了可读性并使种植错误变得更容易.
有没有办法以某种方式列出所有字符串,以便它们尽可能在代码中彼此靠近?
我有以下COM接口层次结构和一个实现它们的类:
interface IX : public IUnknown{};
interface IY : public IUnknown{};
class CA: public IX, public IY{};
Run Code Online (Sandbox Code Playgroud)
这里class CA有效地继承了IUnknown两次.
我们知道有两个vtable指针class CA- 一个指向IX,另一个指向IY.因此IUnknown存储在IX子对象中与IUnknown存储在IY子对象中不同.
然而,当我们调用IX::QueryInterface()或IY::QueryInterface()在相同的对象和查询时,IUnknown我们得到相同的IUnknown*指针.
为什么会这样?
假设我有以下课程:
class Sample {
public:
Sample( int ) {}
};
Run Code Online (Sandbox Code Playgroud)
一些函数返回 int
int SomeFunction()
{
return 0;
}
Run Code Online (Sandbox Code Playgroud)
而这段代码:
Sample* sample = new Sample( SomeFunction() );
Run Code Online (Sandbox Code Playgroud)
现在我期待以下顺序:
SomeFunction() 然后运行::operator new() 然后运行以为对象分配内存class Sample 构造函数在已分配的内存上运行这个顺序是固定的还是可以通过实现来改变,例如说第一个内存被分配,然后SomeFunction()调用,然后运行构造函数?换句话说,可以调用operator new()函数并调用类构造函数与任何东西交错吗?
我有很多32位C++代码,我想在Windows Azure Compute Service中运行.代码已经打包到COM服务器中,所以我想从托管代码中使用该服务器来处理外部请求.
我用Google搜索但无法找到有关如何在Windows Azure下部署COM服务器的任何详细信息.我怎么做?有导游吗?有什么限制?
我发现这篇文章提出了以下模板和一个用于获取数组大小的宏:
template<typename Type, size_t Size>
char ( &ArraySizeHelper(Type( &Array )[Size]) )[Size];
#define _countof(Array) sizeof(ArraySizeHelper(Array))
Run Code Online (Sandbox Code Playgroud)
我发现以下部分完全不清楚.sizeof应用于函数声明.我希望结果是"函数指针的大小".为什么它会获得"返回值的大小"呢?
我想从我的Windows Azure Web应用程序中的自托管Web应用程序中重用一些代码逻辑.目前我的代码如下:
void myFunction( params )
{
//environment-neutral code
}
Run Code Online (Sandbox Code Playgroud)
我需要重写该代码,以使程序采取不同的行动,具体取决于是否在Azure上:
void myFunctionModified( params )
{
if( onAzure() ) {
//run Azure-specific code
} else {
//run non-Azure code
}
}
Run Code Online (Sandbox Code Playgroud)
是的,我知道虚函数,但我需要这样的代码,至少可以在调用那些虚函数之前实例化正确的对象.
问题是实现onAzure()我需要使用仅存在于Windows Azure上的程序集中的东西(RoleEnvironment例如).因此,我不知道如何实现,onAzure()以便在Windows Azure环境之外运行时不会崩溃.
如何根据系统中存在的程序集使应用程序采取不同的行为?
请考虑以下代码:
class Test() {
public:
Test()
{
memset( buffer, 0, sizeof( buffer ) );
}
void Process()
{
printf( buffer );
}
private:
char buffer[1000];
};
int main()
{
Test().Process();
char buffer[1000] = {};
print( buffer );
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我无法推断是否buffer允许在main中重用以前由临时对象占用的内存class Test.根据标准自动存储(3.7.2/1)必须至少持续到块结束.
我找不到强制临时对象使用自动存储的措辞,除了6.6/2,其中描述了一个跳转语句,并说在退出范围[...]时,所有构造对象都会调用析构函数(12.4)具有自动存储持续时间(3.7.2)(命名对象或临时对象),这似乎意味着临时使用自动存储.
临时工需要使用自动存储吗?main上面代码中的局部变量是否允许重用以前由临时占用的内存,还是应该使用不同的存储?
我正在尝试在MVC 2应用程序的特定控制器上实现自定义基本身份验证.具体来说,我继承AuthorizeAttribute并覆盖AuthorizeCore()方法:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if( doAuthorization() ) {
return true;
}
// send HTTP 401
HttpContext context = HttpContext.Current;
context.Response.StatusCode = 401;
context.Response.AddHeader( "WWW-Authenticate",
String.Format("Basic realm=\"{0}\"", myRealm);
context.Response.End();
return false;
}
Run Code Online (Sandbox Code Playgroud)
并使用我的继承属性标记控制器.
整个过程都有效,但每当AuthorizeCore返回falseMVC继续处理请求并被Application_Error()调用时,我会在那里检索以下异常:
Server cannot set status after HTTP headers have been sent.
at System.Web.HttpResponse.set_StatusCode(Int32 value)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.<BeginProcessRequest>b__4()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.<MakeVoidDelegate>b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
Run Code Online (Sandbox Code Playgroud)
如何让MVC停止处理请求并防止该异常?
SQL Azure不仅要求每个表都具有聚簇索引,还要求不允许DROP INDEX聚簇索引.
现在我有一个表错误地在列上有一个聚簇索引A,我希望它在列上有一个聚簇索引B.
如果不允许删除聚簇索引,如何在另一列上创建聚簇索引?
当应用于指向不完整类型的指针时,Visual C++会出现C4150警告delete.
根据标准,此类案件会产生不确定的行为.在Visual C++中的AFAIK,它们导致默认operator delete()函数,并且不会调用析构函数,这会导致许多错误.
现在我可以用#prarma warning( error : 4150 )Visual C++将该警告视为错误.我想有一些原因是为什么它是一个警告而不是默认情况下在Visual C++中的错误.
我想在哪些现实代码中允许这样的情况?为什么我不将该警告切换为编译器错误?
c++ compiler-construction compiler-warnings visual-c++ delete-operator
c++ ×5
azure ×3
.net ×2
c# ×2
cloud ×2
com ×2
windows ×2
arrays ×1
asp.net ×1
asp.net-mvc ×1
assemblies ×1
class ×1
constructor ×1
deployment ×1
duration ×1
iis ×1
indexing ×1
inheritance ×1
memory ×1
new-operator ×1
size ×1
sql ×1
sql-server ×1
string ×1
templates ×1
visual-c++ ×1