gpt4 book ai didi

c++ - C++模板函数,在仍允许内联的同时指定回调仿函数/lambda的参数类型?

转载 作者:行者123 更新时间:2023-12-02 10:02:31 26 4
gpt4 key购买 nike

我们通常做的是这样的:

template<class Callback>  
void some_func(Callback const& callback){
....
}

我想要的是这样的:
template<class void Callback(int)>  //<---
void some_func(Callback const& callback){// not valid
....
}

如果我们通过 std::function传递,我们可以指定类型,但是它会禁止内联。

最佳答案

如果您拥有C++ 20,那么这正是这些概念的所在

#include <concepts>

template<typename T>
concept Callback = requires(T a) {
{ a(int()) } -> std::same_as<void>;
};

template<Callback T>
void some_func(T const& callback){
// ....
}

int a(int) {
return 0;
}

void b(int) {}

int main() {
// below does not compile
// some_func(a);
some_func(b);
}

关于c++ - C++模板函数,在仍允许内联的同时指定回调仿函数/lambda的参数类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61932900/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com