"重载"模板化和非模板化类型

3
在C++中,可以重载一个模板函数,使其能够使用模板参数或不使用模板参数调用:
void func();
template <typename T> void func();

func();
func<int>();

这是否也适用于类型(即类)?
class Class;
template <typename T> class Class;

Class a;
Class<int> b;

我只对能够同时使用ClassClass<T>作为类型感兴趣,其中Class的行为与Class<void>完全相同 - 类的声明可以尽可能复杂以使其正常工作。


1
你可以使用默认模板参数并将其保留为 Class<>。在我看来,有时将其设置为模板可能会令人困惑。我认为如果其他语法是可能的,那么默认值应该是使用它。 - chris
3
你可以使用 auto a = make_class();auto a = make_class<int>(); - dyp
@dyp 我实际上很喜欢这个,特别是因为这个类将经常用作 r-value。 - zennehoy
1个回答

2

添加默认参数。

template<typename T = void>
class Class;

Class<>现在等同于Class<void>


谢谢您的建议,但我更喜欢使用简单的“Class”而不是“Class<>”。 - zennehoy
1
@zennehoy,你不能使用类型或模板别名来实现这一点,因为单个名称不能同时表示类型和模板。也许可以通过宏技巧找到解决方法,但我不想走那条路。 - pmr
谢谢 - 我也担心如此,但我想问一下。宏编程绝对不是一个选项,所以我想我只能使用 Class<> 了。 - zennehoy

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接