gpt4 book ai didi

c++ - 为什么不使用非类型模板参数实现 std::bind 的占位符?

转载 作者:太空宇宙 更新时间:2023-11-03 10:40:40 25 4
gpt4 key购买 nike

我知道这个问题相当理论化,但我认为占位符是否会被定义为模板,例如:

namespace std { 
namespace placeholders {
template <size_t> struct placeholder { constexpr placeholder() {}; };
template <size_t N> constexpr placeholder<N> _{};
}
}

用法:

std::bind(foo, std::placeholders::_<1>, std::placeholders::_<2>); 

或者对于 c++11:

namespace std { 
namespace placeholders {
template <size_t> struct _ { };
}
}

用法:

std::bind(foo, std::placeholders::_<1>{}, std::placeholders::_<2>{});

代码不会失去任何清晰度,我们将能够使用它进行一些奇特的元编程。那么...为什么不使用非类型模板参数实现 std::bind 的占位符?

最佳答案

变量模板在 C++11 中不存在,这就是 std::bind被添加到语言中。

_1名字很短,取自 boost其中 std::bind已开发。

您可以轻松编写自己的类似占位符。

namespace my_placeholders {
template <int> struct placeholder { constexpr placeholder() {}; };
template <int N> constexpr placeholder<N> _{};
}
namespace std {
template<int N>
struct is_placeholder< ::my_placeholders::placeholder<N> >:
std::integral_constant<int, N>
{};
}

现在my_placeholders::_<1>是有效的 std::bind相当于 _1 的占位符在每一个重要方面。

考虑到执行此操作的能力,坦率地说,使用 std::bind 是多么烦人与 lambda 相比,我发现没有人愿意为标准后 C++14 添加这样的功能。

关于c++ - 为什么不使用非类型模板参数实现 std::bind 的占位符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38855579/

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