gpt4 book ai didi

c++ - 未在 clang++ 中编译的具有指向方法的指针的嵌套模板类

转载 作者:IT老高 更新时间:2023-10-28 21:37:13 25 4
gpt4 key购买 nike

SSCCE我的问题是:

template <class T> class MyClass
{
template <void (MyClass::*M)() const> struct wrapper
{
virtual void call();
};
};

template <typename T>
template <void (MyClass<T>::*M)() const>
void MyClass<T>::wrapper<M>::call()
{
}

此代码在 gcc 中编译但失败并出现错误:

error: nested name specifier 'MyClass<T>::wrapper<M>::' for declaration does not refer into a class, class template or class template partial specialization
void MyClass<T>::wrapper<M>::call()
~~~~~~~~~~~~~~~~~~~~~~~~~^

在铿锵++中。 为什么?

call 类中的定义解决了这个问题,我知道。任何非指向方法的模板在任何地方都可以正常工作。 template/typename 的实验没有结果。

最佳答案

可能的解决方法:考虑使用 std::function 代替包装器。它不完全相同(对可接受的函数指针的约束较少),但它会在 clang++ 上编译并简化您的代码。

#include <functional>

template <class T> class MyClass
{
typedef std::function<void(void) const > wrapper;
};

关于c++ - 未在 clang++ 中编译的具有指向方法的指针的嵌套模板类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31711926/

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