我试图定义一个具有类型参数和非类型参数的模板函数。但是,非类型参数的类型取决于类型参数。它看起来像下面这样:
\n\ntemplate<typename T>\nclass A{\n typedef T* Pointer;\n};\n\ntemplate<typename T, A<typename T>::Pointer P>\nT fun(){\n return *P;\n}\n\nint main(){\n fun<int, (int*)0>();\n}\nRun Code Online (Sandbox Code Playgroud)\n\n如果我编译代码,编译器会抱怨:
\n\ntest.cpp:6:34: error: template argument 1 is invalid\n template<typename T, A<typename T>::Pointer P>\n ^\ntest.cpp:6:45: error: expected \xe2\x80\x98>\xe2\x80\x99 before \xe2\x80\x98P\xe2\x80\x99\n template<typename T, A<typename T>::Pointer P>\n ^\nRun Code Online (Sandbox Code Playgroud)\n\n我应该怎么做才能让我的代码正常工作?谢谢你!
\n\n附言。上面的代码只是结构的一个例子。我知道代码本身毫无意义。
\n你几乎把它放在typename了正确的位置。
template<typename T, typename A<T>::Pointer P>
Run Code Online (Sandbox Code Playgroud)
此外,Pointer typedef为了使其发挥作用,需要公开。
当您修复语法和访问控制时它会起作用:
template<typename T>
class A
{
public: // must be accessible!
typedef T* Pointer;
};
template<typename T, typename A<T>::Pointer P> // like this
T fun()
{
return *P;
}
int main()
{
fun<int, (int*)0>();
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1262 次 |
| 最近记录: |