【发布时间】:2021-08-05 11:47:48
【问题描述】:
我发现了一些类似的主题,但似乎没有一个可以直接回答我的特定问题。
我在某个库中有一个类(我们称之为 Foo),我们在几个模块中使用它。现在我需要将这个类转换为可变参数模板(所以现在我有:template<class... T> Foo() {}),因为一些新用途需要完全相同的通用机制,但需要在内部接受额外的参数。已经在使用的旧实现不需要这个。
所以我将其转换为存储在一个 *.h 文件中的可变参数模板,但现在无论我们已经使用这个类,我都需要将每次出现的 Foo() 更改为 Foo<>(),以便现有代码能够作为它做了。
现在,我不确定是否有一些我什至不知道的模块会使用这个库,所以我想到了一个灵活的解决方案,比如 Foo 的别名,在此之后不需要更新其他模块图书馆的变化。
在这个特定的示例中是否可以使用类似using Foo = Foo<> 的内容,这样代码中已经存在的所有Foo 将自动被视为Foo<>,而无需对源代码进行任何更改?
是否可以在与模板定义/声明相同的文件中定义这样的别名,即使它与类本身具有完全相同的名称?
【问题讨论】:
-
在 C++17 中(带类模板参数推导)大多数情况下可以使用
Foo代替Foo<>。否则不行,不可能。 -
@HolyBlackCat:“大多数情况”。我不会这么说,不适用于成员、函数参数、类型(在模板中)... CTAD 仅用于实例化。
标签: c++ templates alias using variadic