gpt4 book ai didi

c++ - 如何确保作为模板参数传递的函数类型不修改参数?

转载 作者:太空宇宙 更新时间:2023-11-04 15:01:42 26 4
gpt4 key购买 nike

考虑这个模板

template<typename FunctionType>
void foo(FunctionType && function)
{
Bar b;
bar.mutateState();
function(bar);
}

我想确保 function 不会改变 bar。以下不应编译。

foo([](Bar &){});

但是,这两行都应该编译。

foo([](const Bar &){});
foo([](Bar){});

可以使用哪些技术?越简单越好,但我更喜欢模板类型自省(introspection),而不是 std::function 或函数指针签名。

最佳答案

您可以修改 foo 以使用 barconst 版本调用 function:

template<typename FunctionType>
void foo(FunctionType && function)
{
Bar bar;
bar.mutateState();
auto const & c_bar = bar;
function(c_bar);
}

关于c++ - 如何确保作为模板参数传递的函数类型不修改参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36151201/

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