不带参数的可变参数模板的别名
Alias to variadic template with no arguments
我发现了一些类似的主题,但 none 似乎直接回答了我的特定问题。
我在一些库中有一个 class(我们称它为 Foo),我们在几个模块中使用它。现在我需要将此 class 转换为可变参数模板(所以现在我有:template<class... T> Foo() {}
),因为一些新用途需要完全相同的通用机制,但需要在内部接受其他参数。已经在使用的旧实现不需要这个。
所以我将其转换为存储在一个 *.h 文件中的可变参数模板,但现在无论我们在哪里使用这个 class 我都需要将 Foo()
的每个出现更改为 Foo<>()
,以便现有代码能够正常工作。
现在,我不确定是否有一些我什至不知道的模块会使用这个库,所以我想到了一个灵活的解决方案,比如 Foo<> 的别名,不需要在此之后更新其他模块库中的更改。
在这个特定的例子中是否可以使用类似的东西:using Foo = Foo<>
,这样代码中已经存在的所有 Foo
都会自动被视为 Foo<>
而无需需要对源代码进行任何更改吗?
是否可以在与模板 definition/declaration 相同的文件中定义这样的别名,即使它与 class 本身具有完全相同的名称?
如果将 Foo
的模板化定义重命名为其他名称 FooExtended
,则可以 typedef
将空模板 Foo
//old
class Foo;
//new
template<class... Args>
class FooExtended;
using Foo = FooExtended<>;
我发现了一些类似的主题,但 none 似乎直接回答了我的特定问题。
我在一些库中有一个 class(我们称它为 Foo),我们在几个模块中使用它。现在我需要将此 class 转换为可变参数模板(所以现在我有:template<class... T> Foo() {}
),因为一些新用途需要完全相同的通用机制,但需要在内部接受其他参数。已经在使用的旧实现不需要这个。
所以我将其转换为存储在一个 *.h 文件中的可变参数模板,但现在无论我们在哪里使用这个 class 我都需要将 Foo()
的每个出现更改为 Foo<>()
,以便现有代码能够正常工作。
现在,我不确定是否有一些我什至不知道的模块会使用这个库,所以我想到了一个灵活的解决方案,比如 Foo<> 的别名,不需要在此之后更新其他模块库中的更改。
在这个特定的例子中是否可以使用类似的东西:using Foo = Foo<>
,这样代码中已经存在的所有 Foo
都会自动被视为 Foo<>
而无需需要对源代码进行任何更改吗?
是否可以在与模板 definition/declaration 相同的文件中定义这样的别名,即使它与 class 本身具有完全相同的名称?
如果将 Foo
的模板化定义重命名为其他名称 FooExtended
,则可以 typedef
将空模板 Foo
//old
class Foo;
//new
template<class... Args>
class FooExtended;
using Foo = FooExtended<>;