如何实现is_stl_vector

发布于 2024-10-12 06:57:22 字数 656 浏览 2 评论 0原文

我想为 STL 的向量模板参数专门设计一个模板。像这样的事情:

// (1)
template <typename T>
class A
{
    ...
};

// (2)
template <>
class A<std::vector<> >
{
    ...
};

我不关心向量元素的类型是什么。我想按如下方式使用它:

A<int> a1; // Will use the general specialization
A<std::vector<int> > a2; // Will use the second specialization

总的来说,我一直在尝试定义类似于 boost 类型特征的东西。就像

template <class T> 
struct is_stl_vector 
{
    // Will be true if T is a vector, false otherwise
    static const bool value = ...; 
};

我不能使用模板 template (我认为是这样),因为它也应该针对非模板类型进行编译。有可能吗?

I want to specialize a template for STL's vector template arguments. Something like this:

// (1)
template <typename T>
class A
{
    ...
};

// (2)
template <>
class A<std::vector<> >
{
    ...
};

I don't care what is the type of the vector element. I would like to use it as follows:

A<int> a1; // Will use the general specialization
A<std::vector<int> > a2; // Will use the second specialization

In general I've been trying to define something similar to boost's type traits. Something like

template <class T> 
struct is_stl_vector 
{
    // Will be true if T is a vector, false otherwise
    static const bool value = ...; 
};

I cannot use template template (I think so) because it should compile for non-template types too. Is it possible at all?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

别念他 2024-10-19 06:57:22

你可以简单地像这样专门化:

// (2)
template <typename T, typename Alloc>
struct A<std::vector<T, Alloc> >
{...};

You can simply specialize like this:

// (2)
template <typename T, typename Alloc>
struct A<std::vector<T, Alloc> >
{...};
偏爱自由 2024-10-19 06:57:22

专业化是这样的:

// (2)
template <class T, class U>
class A<std::vector<T, U> >
{
    ...
};

请注意,它不能保证工作(并且没有其他方法可以保证工作),因为 std::vector 的模板参数计数可能因实现而异。在 C++0x 中,这应该可以使用参数包来解决。

The specialization goes like this:

// (2)
template <class T, class U>
class A<std::vector<T, U> >
{
    ...
};

Note that it is not guaranteed to work (and there si no other way that's guaranteed to work), because the template parameter count of std::vector may vary across implementations. In C++0x, this should be solvable using parameter packs.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文