gpt4 book ai didi

C++函数转换题

转载 作者:太空狗 更新时间:2023-10-29 22:52:28 25 4
gpt4 key购买 nike

我尝试使用 boost::function<x>包装器来存储和转换我的功能对象,我想知道是否有编译检查“是否存在从任意类型 T 到类型 boost::function<x> 的转换”

这是一个代码示例:

struct Functor {
int operator()(int) {
return 5;
}
};

// Should not fire static assertion.
STATIC_ASSERT( (IS_CONVERTIBLE<Functor,
boost::function<int (int)> >::value) );

// Should fire static assertion.
STATIC_ASSERT( (IS_CONVERTIBLE<Functor,
boost::function<int (std::string)> >::value) );

现在 - 执行 IS_CONVERTIBLE 的方法检查是否存在?


我尝试使用 boost::is_convertible类型特征检查,但它会产生 true对于任何 Functor输入:

bool value1 = boost::is_convertible<Functor, 
boost::function<int (int)> >::value;

bool value2 = boost::is_convertible<Functor,
boost::function<int (std::string)> >::value;

// At this point both 'value1' and 'value2' equal TRUE.

我也有过以下尝试:

// Here the results are also always TRUE.
bool value = boost::is_convertible<Functor,
boost::function1<int, int> >::value;

// This doesn't work, because unary functions are constructed via
// inheritance (the result is always FALSE).
bool value = boost::is_convertible<Functor,
std::unary_function<int, int>::value;

我真的希望能够在编译时检查这种转换的可能性,所以如果有人知道如何实现它,我将不胜感激。

谢谢。

最佳答案

除了@James 写的内容之外,您似乎还想拥有类似is_callable 的内容。 These class templates处理最多 5 个参数的函数/函数指针和函数对象类或对它们的引用。使用它们需要您自担风险:)

关于C++函数转换题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4180233/

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