使用定义函数模板别名

define function template alias by using

本文关键字:别名 函数模板 定义      更新时间:2023-10-16

我定义了一个函数模板别名:

template <typename T>
using Cb = typename std::add_pointer<void(bool, T)>::type;

但是得到这个错误:

错误:无法在赋值中将 'Log::operator(((Read&( [with T = int]::' 转换为 'Cb' {aka 'void (*((bool, int('}

template <typename T>
class Log : public Sink<T> {
public:
void
operator()(Read<T> &read) {
if (!more_) {
// error !!!
more_ = std::function<Cb<T>>([&](bool done, T val) {
if (!done) {
cout << val << endl;
this->operator()(read);
}
});
}
read(false, more_);
}
private:
Cb<T> more_ = nullptr;
};

主要功能:

int main() {
Log<int> logInt;
return 0;
}

谁来解决此语法错误?

代码示例

问题是

std::function<Cb<T>>决心随心所欲地std::function<void (*)(bool, int)>

std::function<void (bool, int)>.

因此,您可以将别名更改为

template <typename T>
using Cb = void(bool, T);