我目前面临一个我自己无法解决的问题。基本上我想要做的是在 C++ 中实现一些类似 linq 的行为。
我将从标题中的代码开始:
template<typename T, template<class = T> class A,
template<class = T, template<class=T> class = A> class C>
class queryable
{
public:
typedef T value_type;
typedef A<value_type> allocator_type;
typedef C<value_type, allocator_type> container_type; // (1)
typedef queryable<T, A, C> type;
queryable(container_type const &) { }
template<typename _Out> queryable<_Out, A, C> select(/* some delegate */);
// more methods etc
}
这就是我希望它被实例化的方式:
std::vector<int> my_vec;
queryable<std::vector<int> > q(my_vec);
不用说这不起作用(否则我不会在这里:))
现在更奇怪的是,即使这样似乎也不起作用:
std::vector<int> my_vec;
queryable<int, std::allocator, std::vector> q(my_vec);
正如你所看到的(通过查看 select 函数),对我来说重要的是不要只使用这样的东西:
template<typename T> class queryable;
关于如何解决这个问题的任何建议?这甚至可能吗?
任何帮助,将不胜感激!
编辑:我得到的错误:
../entry.cpp:19:58: error: type/value mismatch at argument 3 in template parameter list for ‘template<class T, template<class> class A, template<class, template<class> class<template-parameter-2-2> > class C> class failproof::collections::queryable’
../entry.cpp:19:58: error: expected a template of type ‘template<class, template<class> class<template-parameter-2-2> > class C’, got ‘template<class _Tp, class _Alloc> class std::vector’
../entry.cpp:19:61: error: invalid type in declaration before ‘;’ token
编辑2:
据我了解,编译器抱怨 C 不采用 2 个类参数,而是 1 个类参数和 1 个模板化类参数 (1),因为我将 C 定义为那样。有没有办法解决这个问题?