c++ - 无效成员函数的元组

标签 c++ c++11 tuples function-pointers

我正在尝试创建一个元组,其中包含指向 void 成员函数的指针,但我无法使其正常工作。 这是我的代码:

class A
{
    void dostuff(){ cout<<" doing stuff "}
};

class B
{
    A* aobj;
    typedef vector<vector<tuple<int,int,void(A::*)()>>> sequence;

    sequence Sequence;

    void getinfo(int n1, int n2, void(A::*func)())
    {
        Sequence.resize(1);
        Sequence[0].push_back(make_tuple(n1,n2,(aobj->*func)()))//<--ERROR HERE
    };
};

它给我错误“无效使用 void 表达式”。 我还尝试将功能简化为:

void getinfo(void(A::*func)())
{
    make_tuple((aobj->*func)());
}

它仍然给我同样的错误。

最佳答案

正如 Igor Tandetnik 指出的那样,(aobj->*func)() 正在调用该方法并将 void 返回给 make_tuple() 函数。要传递成员指针,它应该改为 make_tuple(n1,n2,func)。

关于c++ - 无效成员函数的元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38690679/

相关文章:

c++ - std::forward_as_tuple 将参数传递给 2 个构造函数

python - 计算元组列表中出现的次数

C++ - 不断递增一个整数

performance - 为什么C++中 float 除法比整数除法快?

c++ - 为什么 `bool b = 2` 工作正常但 `bool b = {2}` 会产生缩小转换的警告?

c++ - 编写用于识别 void 类型的完全特化的问题

Python:将单个元素与列表中的每个元素配对

c++ - 有什么方法可以在我的程序中使用 msinfo32.exe 吗?

c# - 如何将 C 函数签名转换为 C# 并在 native DLL 中调用该函数?

c++ - 将尾调用 void (i32, ...) bitcast 转换为 llvm::Function 以获取 FnAttribute