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

我必须如何在我的实现中定义它

我尝试了以下三种不起作用的方法:

  • double Something::op_Implicit()
    -“op_Implicit不是成员”
  • static double Something::op_Implicit(Something^s)
    -“op_Implicit不是成员”
  • 运算符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 plain
      double()
      效果很好,它是System::double的别名。我检查了我发布的代码在VB.NET应用程序中使用时效果很好。我刚刚用plain double再次尝试了它,你是对的,也许我第一次尝试它时就错了。。。
      public ref class Something {
          double yadayada;
      public:
          static operator double(Something^ arg) {
              return arg->yadayada;
          }
      };