函数调用如何给出编译时类型?
How does a function call give a compile-time type?
#include <range/v3/all.hpp>
using namespace ranges;
template<typename I, typename O>
tagged_pair<tag::in(I), tag::out(O)>
f(I i, O o)
{
return { i, o };
}
int main()
{
char buf[8]{};
f(std::begin(buf), std::end(buf));
}
代码使用range-v3,可以用clang
编译。
但是,我不明白为什么tagged_pair<tag::in(I), tag::out(O)>
行是合法的。 I
是类型,tag::in(I)
也是类型,tag::in
不是宏,tag::in(I)
如何在编译时给出类型?
另见 http://en.cppreference.com/w/cpp/experimental/ranges/algorithm/copy
是接受I
返回tag::in
的函数类型,也是一种类型
这个是用的,比如在std::function
,比如std::function<void(int)>
.
#include <range/v3/all.hpp>
using namespace ranges;
template<typename I, typename O>
tagged_pair<tag::in(I), tag::out(O)>
f(I i, O o)
{
return { i, o };
}
int main()
{
char buf[8]{};
f(std::begin(buf), std::end(buf));
}
代码使用range-v3,可以用clang
编译。
但是,我不明白为什么tagged_pair<tag::in(I), tag::out(O)>
行是合法的。 I
是类型,tag::in(I)
也是类型,tag::in
不是宏,tag::in(I)
如何在编译时给出类型?
另见 http://en.cppreference.com/w/cpp/experimental/ranges/algorithm/copy
是接受I
返回tag::in
的函数类型,也是一种类型
这个是用的,比如在std::function
,比如std::function<void(int)>
.