私は質問ではなく、理論的である知っているが、プレースホルダは、例えばのようなテンプレートとして定義される場合、私は思う:使用方法と非形式のテンプレートパラメータを使用してstd :: bindのプレースホルダが実装されないのはなぜですか?
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
のプレースホルダが非型テンプレートパラメータを使って実装されているのはなぜですか?
その構文は合法的に見えません。 '_ <1>'は依然として型であり、型として値を渡すことはできません: '_ <1> {}'が必要ですか?または 'template struct placeholder {constexprプレースホルダー(){};};テンプレート constexprプレースホルダー _ {}; '?そして、2日目になると、C++ 11には存在しない変数テンプレートが必要になります。それで、あなたは何を知りたいですか? –
Yakk