2

我想使用 c++ 实现这样的结果:

爪哇:

public interface ITemp {
    void onCall(double value);
}

主要:

double d=2;
ITemp mVariable = new ITemp() {
@Override
    public void onCall(double value) {
    ... what to do... you can use 'd' variable...
    }
};

在 C++ 中:

class ITemp {
public:
    virtual void onCall(double something) =0;
    virtual ~ITemp();
};

主要:

double d=2;
ITemp mVariable = .... // I cannot instantiate class containing pure virtual method
// But I want to use variable d to create a method
4

3 回答 3

3

你不能完全做到这一点,因为你不能在 C++ 中创建匿名类,但你可以做类似的事情:

int main()
{
    double d = 2;
    class T : public ITemp
    {
        double& m_v;
    public:
        T(double& v) : m_v(v) {}
        void onCall(double value)
        {
            // Do something with m_v;
            m_v *= value;
        }
    } t(d);
    t.onCall(4);
    std::cout << "d: " << d << std::endl;  // d is 8.
}

引用 ('&')m_v 生成与 相同的变量d但名称不同。

于 2012-07-30T14:49:17.977 回答
1

在构造函数中用 d 构造类怎么样?

    class ITemp {
      double m_d;
    public:
      ITemp(double d) : m_d(d) {}
      virtual void onCall(double something) = 0; // inside, you can use m_d variable         along with something for whatever you want.
      virtual ~ITemp();
    };

我想我不明白 onCall 方法做了什么以及你想如何使用它。如果要使用 d,请将其传递给构造函数或将其作为另一个参数传递给 onCall。

当然,如果这不是您想要做的,模板会帮助您。但是,它们通常用于每次将不同的类型发送到课堂上。看来你不需要那个。

于 2012-07-30T14:48:12.560 回答
1

您可以将接口实现为未命名的类,但不能访问局部变量并创建闭包。

int main(int argc, char* argv[])
{
    class : public ITemp
    {
    public:
        virtual void onCall(double something)
        {
            std::cout << something;
        }
    } temp;

    ITemp& itemp = temp;

    itemp.onCall(100.3145);

    return 0;
}
于 2012-07-30T15:14:25.980 回答