【问题标题】:C++ friend pointer to function指向函数的 C++ 友元指针
【发布时间】:2014-12-23 04:29:55
【问题描述】:

我有一个参考类:

public ref class class1 sealed
{
    bool (*pointer_to_function)(args);
}
bool function1(args);
//inside of class1 functions
pointer_to_function = &function1;

如何将class1 的引用传递给function1 以访问class1 中的所有数据(包括私有数据)? 如果args == "class1^ args"function1 充满了错误。 另外,我不能将pointer_to_function 设置为班级好友。

【问题讨论】:

    标签: c++ windows-8.1 c++-cx


    【解决方案1】:
      bool (*pointer_to_function)(args);
    

    这是一个 C 函数指针声明。请记住,您的“class1”可以由不了解 C bean 的代码使用。例如 Javascript 或 VB.NET。所以这是不可能的,编译器会抱怨,你必须使用 delegate 代替。委托是 C++/CX 提供的语法糖,用于声明可以跨多种语言工作的函数指针。它们比C函数指针更强大,它们还可以调用类的实例方法。

    一个简单的例子:

    namespace Foo {
        public delegate void mycallback(int arg);
    
        public ref class class1 sealed {
        public:
            property mycallback^ pointer_to_function;
        };
    }
    

    如果你想在 C++ 代码中初始化它,那么你会写这样的东西:

    ref class Bar {
    private:
        Foo::class1^ obj;
        void callbackFunction(int arg) { }
    public:
        Bar() : obj(ref new Foo::class1) {
            obj->pointer_to_function = ref new Foo::mycallback(this, &Bar::callbackFunction);
        }
    };
    

    请牢记event keyword

    【讨论】:

    • 我的 pointer_to_function 是私有成员,所以我不需要关心其他语言。并且类 c 的指针更易于使用,我只需要分配一个函数就可以了。问题是当两个头文件相互包含时 Visual Studio 的行为,所以我想知道我是否可以让 function1 成为可以访问私有类成员的朋友
    • 好吧,将其设为私有不是问题。您似乎不小心将其公开了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-08
    • 2018-04-19
    相关资源
    最近更新 更多