C++ cli 如何在C++/CLI?
在我的课堂上,我有这样的东西:C++ cli 如何在C++/CLI?,c++-cli,C++ Cli,在我的课堂上,我有这样的东西: public ref class Something { public: // some methods operator double(); } Something包装来自第三方DLL的内容,该DLL的头中具有完全相同的运算符double()。编译器现在抱怨一个未解析的标记:MyNamespace.Something::op_Implicit 我必须如何在我的实现中定义它 我尝试了以下三种不起作用的方法: double Something:
public ref class Something {
public:
// some methods
operator double();
}
Something
包装来自第三方DLL的内容,该DLL的头中具有完全相同的运算符double()
。编译器现在抱怨一个未解析的标记:MyNamespace.Something::op_Implicit
我必须如何在我的实现中定义它
我尝试了以下三种不起作用的方法:
-“op_Implicit不是成员”double Something::op_Implicit()
-“op_Implicit不是成员”static double Something::op_Implicit(Something^s)
-大量语法错误运算符Something::double(){…}
- 更易于内联编写:
public ref class Something {
double yadayada;
public:
operator double() { return yadayada; }
};
如果没有,则正确的语法为:
Something::operator double() {
return yadayada;
}
从C++/CLI代码中使用这一点是可以的,但是如果您想将转换函数公开给其他语言,则应将其声明为静态:
在
explicit
关键字前面加前缀,以避免意外转换,并强制客户端代码使用强制转换。很抱歉,您的问题不清楚。你需要超负荷转换到双倍?是的,这就是我正在尝试的。@Hans:谢谢,这是解决方案。你能把这个作为答案再次发布吗,这样我就可以把它标记为已接受了?你的最后一个例子是有效的,但我需要使用静态运算符双精度^
并返回一个gcnew-double(arg->yadayada)
,以使它在VB.netNo中引用时工作,这是完全错误的。永远不要将值类型框起来。您根本没有编写到double的转换函数,而是为ValueType编写了一个转换函数。它只是在VB.NET中偶然工作,当您使用Option Strict On时,它不会工作。Just plaindouble()
效果很好,它是System::double的别名。我检查了我发布的代码在VB.NET应用程序中使用时效果很好。我刚刚用plain double再次尝试了它,你是对的,也许我第一次尝试它时就错了。。。
public ref class Something {
double yadayada;
public:
static operator double(Something^ arg) {
return arg->yadayada;
}
};