如何在类模板中传递函数而不使用auto?

问题描述 投票:0回答:1

我有以下功能:

bool comp(Arm l, Arm r) {
    return l.len < r.len;
}

请假设

Arm
是适当声明的结构。

我有以下课程:

template<typename T, typename F>
class Myclass {
public:
    Arm v[10];
    bool Myfunc(int i) {
        int l = i, r = i + 1;
        return F(v[l], v[s]);
    }
};

创建对象时:

Myclass<Arm, decltype(comp)> obj;

我得到了

error: expression list treated as compound expression in functional cast [-fpermissive]

我尝试过传递地址,我尝试过创建函数指针并传递它。我希望它适用于 C++ 11,使用 C++17 我得到它的工作使用:

template<typename T, auto F>
class Myclass {
...

并通过以下方式创建对象:

Myclass<Arm, comp> obj;

这工作得很好。

c++11 templates
1个回答
0
投票

您需要一个

F
的实例才能调用它:

template<typename T, typename F>
class Myclass {
public:
    Arm v[10];
    bool Myfunc(int i) {
        int l = i, r = i + 1;
        return F{}(v[l], v[s]);
//              ^^
    }
};
© www.soinside.com 2019 - 2024. All rights reserved.