gpt4 book ai didi

c++ - 在编译时捕获 std::function 分配

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:37:17 25 4
gpt4 key购买 nike

我只想允许在我的代码库中使用 std::function,前提是它不进行任何分配。

为此,我可以编写类似下面的函数,并且只用它来创建我的函数实例:

template< typename Functor>
std::function<Functor> makeFunction( Functor f)
{
return std::function<Functor>(std::allocator_arg, DummyAllocator(), f);
}

如果 DummyAllocator 在运行时被使用,它将在何处断言或抛出。

理想情况下,我想在编译时捕获分配用例。

template< typename Functor>
std::function<Functor> makeFunction( Functor f)
{
static_assert( size needed for function to wrap f < space available in function,
"error - function will need to allocate memory");

return std::function<Functor>(f);
}

这样的事情可能吗?

最佳答案

您拥有的工厂方法可能是您最好的选择。

如果不合适,你可以选择为函数实现一个适配器;使用 std::function 将接口(interface)实现为成员变量,以便适配器强制执行您的约束。

template <typename S>
class my_function {
std::function<S> func_;
public:
template <typename F>
my_function(F&& f) :
func_(std::allocator_arg, DummyAllocator(), std::forward<F>(f))
{}
// remaining functions required include operator()(...)
};

关于c++ - 在编译时捕获 std::function 分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32254417/

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