2016-11-04 97 views
0

我为自己做了这个语法,因为我认为它对于以后来说更方便。是否可以使用没有参数的模板专门化?

temolate<typename U> struct identity{typedef U type;}; 
temolate<typename T, typename identity<T>::type value=0> struct my{ 
    typedef std::vector<T> vec; 
    typedef std::array<T,value> arr; 
    typedef std::set<T> set; 
    // and so forth 
}; 

我用它:

int main(){ 
    my<int>::vec v; // okay 
    my<int,3>::arr a; // okay 
    // and so forth 
} 

但我也希望这样做的语法:
(专攻的我上面

template<??????????> // what should I do here? 
struct my<?????????>{ // or may be here 
    typedef int i; 
    typedef float f; 
    typedef double d; 
    // and so forth; 
} 

所以,我可以做此:

int main(){ 
    my::i a; // for int, what should I do? 
    my::f b; // for float, and 
    my::d c; // for double, and 
    // AND I ALSI CAN 
    my<int>::vec v; // already I know 
    my<int,3>::arr a; // and know 
} 

这可能吗?


我看到这里:
Default template parameter partial specialization 之前我问。所以我知道my<>::i是可能的。

而且我也知道了如何使用

使用别名我只问这是可能的吗?

using myy = my<int>; 

:与其说NO给我的,你让我downvote

+2

如果我理解正确。当然你可以,但你仍然需要使用'我的<> :: i'等。 –

+0

什么是完全投票**? – skypjack

+0

@skypjack,谢谢。我不是英语母语,也只是学习它,而且我也使用我的平板电脑。 –

回答

1

你,你是愿意接受sligtly不同的名称,你可以使用声明做同样的事情用一个那么请参考类型:

myy::i 
+0

对不起,我的朋友,我可以使用'别名'与'使用',但我希望这样做的同名'我的'注意别的,如果它不可能只是说不 –

+3

@ k-five那么,因此**没有**。 – skypjack

4

您可以预设,您T到一个特殊的类型(这里default_type),然后专门为它:

template<typename U> struct almost_identity{typedef U type;}; 

class default_type{}; 

template<> struct almost_identity<default_type>{ typedef int type; }; 

template<typename T = class default_type, typename almost_identity<T>::type value = 0> struct my{ 
    typedef std::vector<T> vec; 
    typedef std::array<T,value> arr; 
    typedef std::set<T> set; 
    // and so forth 
}; 

template<> 
struct my<default_type, 0> 
{ 
    typedef int i; 
    typedef float f; 
    typedef double d; 
}; 

demo

这将允许您使用my<>::i

如果你绝对想要my::imy<int>::vec是正确的,那么据我所知,没有办法做到这一点。

+0

编译器说:'错误:'template :: type value> struct my'没有模板参数使用' –

+0

@ k-five你从哪里得到那个'U'? – krzaq

+2

@ k-five你需要使用'my'和模板括号,比如GillBates,'我的<> :: i' –

相关问题