gpt4 book ai didi

c++ - 如何在编译时创建具有函数签名的函数指针

转载 作者:行者123 更新时间:2023-11-30 04:43:43 25 4
gpt4 key购买 nike

我确实知道 this .

但是,我没有两个函数可以比较,我有一个函数签名和一个函数指针

template<typename T, typename ... A>
using RequiredSignature = bool(T&, A ... a);

template<typename T, typename ... A>
using RequiredFP = bool(*)(T&, A ... a);

问题:如何确保我收到的函数指针与所需的签名相符?在编译时。

最佳答案

当您想要控制类型时,更好的解决方案是不使用模板参数推导和虚拟参数。只需将类型传递给需要它的模板参数...

template<typename T, typename U>
constexpr inline bool fp_matches_fp(U y)
{
T* x{};
return (sizeof(is_same_helper(x, y))) == (sizeof(yes));
}

你喜欢用它

fp_matches_fp<required_sig>(ok_fun)

调用者不必创建虚拟函数指针,类型特征会处理它。但是我们根本不需要虚拟函数指针...

template<typename T>
yes& is_compatible_helper(T*); //no need to define it now!

template<typename T>
no& is_compatible_helper(...); //no definition needed!

template<typename T, typename U>
constexpr inline bool fp_matches_fp(U y)
{
return (sizeof(is_compatible_helper<T>(y))) == (sizeof(yes));
}

关于c++ - 如何在编译时创建具有函数签名的函数指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58100360/

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