作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
namespace {
enum class API { CPU, CUDA };
template <API Api>
class Allocator {
void* malloc(int size) const;
void free(void* ptr) const;
template <typename T>
T* alloc1(int num) const {
return static_cast<T*>(malloc(num * static_cast<int>(sizeof(T))));
}
};
template <typename T, API Api>
T* alloc2(const Allocator<Api> allocator, int num) {
return static_cast<T*>(allocator.malloc(num * static_cast<int>(sizeof(T))));
}
template <>
class Allocator<API::CPU> {
public:
void* malloc(int size) const { return nullptr; }
void free(void* ptr) const {}
};
Allocator<API::CPU> allocator;
int* ptr1 = allocator.template alloc1<int>(1);
int* ptr2 = alloc2<int>(allocator, 1);
}
alloc1
调用没有编译错误
.../src/test.cc:29:32: error: no member named 'alloc1' in '(anonymous namespace)::Allocator<API::CPU>'
int* ptr1 = allocator.template alloc1<int>(1);
^
.../src/test.cc:29:38: error: expected unqualified-id
int* ptr1 = allocator.template alloc1<int>(1);
^
.../src/test.cc:29:42: error: expected '(' for function-style cast or type construction
int* ptr1 = allocator.template alloc1<int>(1);
~~~^
template
没有帮助:
.../src/test.cc:29:33: error: expected '(' for function-style cast or type construction
int* ptr1 = allocator.alloc1<int>(1);
~~~^
.../src/test.cc:29:23: error: no member named 'alloc1' in '(anonymous namespace)::Allocator<API::CPU>'; did you mean 'malloc'?
int* ptr1 = allocator.alloc1<int>(1);
^~~~~~
malloc
alloc2
作为一种解决方法,所以我只想知道为什么
alloc1
没有或声明/调用它的正确方法是什么。
Allocator<API::CPU>::malloc
的特化/
free
而不是
Allocator<API::CPU>
的特化给出了我预期的行为,但在我原来的情况下,继承可能更合适。
最佳答案
class Allocator<API::CPU>
特化根本没有定义成员函数;它仅在通用模板中定义。如果您想避免对多个规范重复相同的定义,您可以使用继承。像这样的例子:
struct BaseAllocator {
template <typename T>
T* alloc1(int num) const {
...
}
};
template <API Api>
class Allocator : public BaseAllocator {
...
};
template <>
class Allocator<API::CPU> : public BaseAllocator {
...
};
alloc1
是私有(private)的,因此无论如何您都无法从类外访问它。
关于c++ - 在实例上调用时未找到模板类中的模板成员函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60847063/
在我们的数据库表上,我们使用两个唯一的非聚集索引来创建跨四个字段的唯一约束。我们使用两个,因为其中一个字段 ZipCode 是一个可为空的字段。如果表中存在一条包含 ZipCode 的 null 条目
我刚刚开始学习 Rails 3 教程,以便对框架有一点熟悉,但我在生成 schema.rb 时遇到了问题。我的操作系统是 Windows 7 x64、Ruby 1.9.2、MySQL2 gem 0.2
我是一名优秀的程序员,十分优秀!