专门针对不同命名空间中的类的模板函数

时间:2016-04-13 09:31:45

标签: c++ templates c++11

class A{}
class B{}

namespace Other{

    class C {}
    class D {}

}

template<typename T> T func() {}
template<typename T> T func <Other::T>() {}

为什么不能为依赖于不同命名空间中的类型的函数设置专用版本?基本上我想要的是其他类型的所有类型的func版本和任何其他类型的另一个版本。 我是TMP编程的新手,如果这个问题对某些人来说似乎微不足道,那就很抱歉了。

1 个答案:

答案 0 :(得分:1)

  

为什么不能为依赖于不同命名空间中的类型的函数设置专用版本?

因为C ++中没有语法来表示这种特殊化。

您的下一个问题可能是为什么这样的事情不存在。我不是Stroustrup,也不是委员会,甚至也不是委员会成员,所以我只能猜测。我的猜测是,这种东西最初没有被考虑过,但如果是这样的话,那么它只是被认为是一个糟糕的设计决定。

指定这种专业化在某些情况下应该如何表现也并非易事。请考虑以下示例:

namespace One{
    class C;
}

namespace Other{
    using One::C;
}

Other::C应该使用哪种专业化?无论你决定什么,都会让这种方式混淆不清。