__box:未找到标识符

时间:2015-03-19 06:44:18

标签: visual-c++ c++-cli

我认为' __ box':VS 2015编译器中不推荐使用标识符。有什么替代方案?

#using <mscorlib.dll>
using namespace System;
using System::Collections::Stack;

int main() {
   Stack* pS = new Stack();
   Int32 i = 5;       
   pS->Push( __box(i) );
}

MSDN about _box

2 个答案:

答案 0 :(得分:1)

现在有implicit boxing

  

Visual C ++编译器现在将值类型设置为Object。这是   可能因为编译器定义的转换转换值   对象的类型。装箱和拆箱可以处理值类型   作为对象。值类型,包括结构类型和内置   诸如int之类的类型可以与Object类型进行转换。编译器选项:/ clr

来自here的代码:

// clr_implicit_boxing_Std_conversion.cpp
// compile with: /clr
int f3(int ^ i) {   // requires boxing
   return 1;
}

int f3(char c) {   // no boxing required, standard conversion
   return 2;
}

int main() {
   int i = 5;
   System::Console::WriteLine(f3(i));
}

答案 1 :(得分:1)

在Visual Studio 2015中删除了对/clr:oldsyntax的支持(自Visual Studio 2005以来,旧语法已被弃用)。见"Compiler Switch Deprecation/Removal Changes in Visual Studio '14'."

旧语法托管C ++源代码必须移植到C ++ / CLI。如,

Stack^ pS = gcnew Stack();
Int32 i = 5;
pS->Push(i);