簡體   English   中英

模板模板參數部分特化c ++

[英]Template template parameter partial specialization c++

考慮一下代碼:

template<template<typename,typename> class Container>
class A {
    template<class U, class Allocator>
    void Foo(Container<U, Allocator>*, U);
};

現在我想專門研究A在這種情況下,Container是一個已知Value和Comparator的地圖,並在這種情況下創建Foo的定義(沒有Foo )。 我試過這個:

template<typename V, typename Comp> template<class U, class Allocator>
void A<std::map<typename, V, Comp, typename>>::Foo(map<U, V, Comp, Allocator>*, U ) {...}

但是我收到了編譯錯誤: C3200: 'std::map<int,V,Comp,int>' : invalid template argument for template parameter 'Container', expected a class parameter.

我已經在線查看並且只發現了類似的問題,但我找不到一種方法來僅指定模板模板的部分模板參數列表。 有辦法嗎?

編輯:唯一的問題是,在給出模板類時,部分特化是使其表現為具有其余參數的模板。 這里嘗試將map<*,Known1,Known2,*>視為僅有2個參數的模板(可以真正用作A的模板模板參數)。

編輯2:我必須使用的編譯器是GCC 4.1.2,它不支持模板別名,據我所知,這是一個解決方案。

問題是A采用模板模板參數,它有兩種類型:

template<template<typename,typename> Container>
class A {

但是std::map不需要兩種類型。 需要四個:

template<
    class Key,
    class T,
    class Compare = std::less<Key>,
    class Allocator = std::allocator<std::pair<const Key, T> >
> class map;

這是一個問題。 您必須將模板概括為以下內容(還要注意缺少的class關鍵字):

template <template <typename...> class Container>
class A { ... };

但即使如此,最多你可以完全明確地專門化一個成員函數,你不能部分專門化它:

template <>
template <>
void A<std::map>::Foo<>(std::map<U, V>*, U) { ... }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM