一个类中有多个可能的模板

Multiple possible templates in a class

本文关键字:一个      更新时间:2023-10-16

我正在尝试拥有一个可以用类型或数组创建的类。我不确定模板是否是执行此操作的最佳方法,但我认为它们可能会起作用。在下面的代码示例中,我有一个类,它有两个静态方法,它们都根据给定的模板返回类的实例:

template<class T>
template<class A, size_t N>
class Foo {
    static A[N] bar();
    static T bar();
}
template<class A, size_t N>
Foo<A[N]> Foo<A[N]>::bar();
template<class T>
Foo<T> Foo<T>::bar();

所以我可以这样称呼他们:

Foo<int[5]> intarrthing Foo<int[5]>::bar();
Foo<int> intthing Foo<int>::bar();

这不起作用,因为并非所有模板都被使用,那么我如何实现这样的东西?

函数不能仅因返回类型而异(函数模板除外)。

从您的使用情况来看,您可能只需执行以下操作:

template<class T>
class Foo {
    static Foo<T> bar() { return {}; }
};

Foo<int[5]> intarrthing = Foo<int[5]>::bar();
Foo<int> intthing = Foo<int>::bar();