gpt4 book ai didi

c++ - 仅在头文件中静态模板化成员函数的模板行为

转载 作者:太空狗 更新时间:2023-10-29 22:57:16 35 4
gpt4 key购买 nike

class Myclass
{

template <typename T>
static T func()
{
T obj;
return obj;
}

template<>
static int func<int>()
{

}

};

我写了上面的类并尝试编译它。 我收到以下错误:

error: explicit specialization in non-namespace scope 'class Myclass'
error: template-id 'func' in declaration of primary template

然后我像这样将我的静态函数移出类:

namespace helper 
{
template <typename T>
static T func()
{
T obj;
return obj;
}

template<>
static int func<int>()
{

}
}

class Myclass
{
template <typename T>
static T func()
{
helper::func<T>();
}

};

出现以下错误:

error: explicit template specialization cannot have a storage class
In static member function 'static T Myclass::func()':

当然,我内联了我的专门函数并且它起作用了。

namespace helper 
{
template <typename T>
static T func()
{
T obj;
return obj;
}

template<>
inline int func<int>()
{

return 1;
}
}

class Myclass
{
template <typename T>
static T func()
{
helper::func<T>();
}

};

我的问题是:
1) 为什么我们不能特化类内部的静态成员函数。
2) 为什么我们不能有静态模板专用函数

最佳答案

老实说,这两个问题的真正答案可能是“因为”。

你可以特化一个成员函数模板,它只需要在类之外并且不能使用static关键字:

struct Myclass {
template <class T>
static T func() {
T obj{};
return obj;
}
};

template <>
int Myclass::func<int>() { return 42; }

两者主要是语法原因。这只是您必须记住的事情之一。

关于c++ - 仅在头文件中静态模板化成员函数的模板行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45103621/

35 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com