dir*_*lik 6 c++ templates metaprogramming currying
我有类Foo,它有两个模板参数,A和B:
template<typename A, typename B>
struct Foo {};
Run Code Online (Sandbox Code Playgroud)
我也有类Base,它有一个模板模板参数:
template<template<typename B> typename Foo>
struct Base {};
Run Code Online (Sandbox Code Playgroud)
Derived假设以下内容我想编写类:
Derived有一个模板参数(A)Derived 扩展课程 BaseDerived作为模板参数传递给类Base类Foo,但有一个参数"currying"(A)我怎样才能做到这一点?
这是我的(不工作)解决方案:
template<template<typename B> typename Foo>
struct Base {};
template<typename A, typename B>
struct Foo {};
template<template<typename A, typename B> typename Foo, typename A>
struct BindFirst {
template<typename B>
using Result = Foo<A, B>;
};
template<typename A>
struct Derived : Base<
// error is here
typename BindFirst<Foo, A>::Result
> {};
Run Code Online (Sandbox Code Playgroud)
这给了我错误:
模板模板参数的模板参数必须是类模板或类型别名模板
该模板Base需要一个模板作为第一个参数,但您尝试传递依赖类型(由 指示typename),因此会出现错误消息。Result此外,内部的嵌套别名BindFirst是一个模板,因此需要一个模板参数才能与typename. 所以而不是
typename BindFirst<Foo, A>::Result
Run Code Online (Sandbox Code Playgroud)
你必须告诉编译器这Result实际上是一个模板,使用
BindFirst<Foo, A>::template Result
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
111 次 |
| 最近记录: |