gpt4 book ai didi

c++ - 当类具有 operator() 时的结构特化

转载 作者:行者123 更新时间:2023-11-30 03:46:14 27 4
gpt4 key购买 nike

当传递的类型具有 operator()(仿函数或 lambda 函数)时,我想专门化一个结构。目前,我有这段代码:

#include <iostream>
#include <type_traits>

template <class...>
struct mystruct: std::false_type {};

template <class C>
struct mystruct<C, decltype(&C::operator())>: std::true_type {};

int main() {
int n = 42;
auto lambda = [&n](int i){return i + n;};

// Should return false: OK
std::cout<<mystruct<decltype(x)>::value<<std::endl;

// Should return true: problem
std::cout<<mystruct<decltype(lambda)>::value<<std::endl;

return 0;
}

如何让它发挥作用?

额外的问题:即使 operator() 是 protected 或私有(private)的,如何让它工作?

最佳答案

这将是对 void_t 的适当使用技术:

template <class, class = std::void_t<>>
struct mystruct: std::false_type {};

template <class C>
struct mystruct<C, std::void_t<decltype(&C::operator())>>: std::true_type {};

尽管 void_t 只在 C++17 之后的库中,但很容易添加到您自己的实用程序库中。

关于奖金问题,请参阅 Detect existence of private member .

关于c++ - 当类具有 operator() 时的结构特化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34186479/

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