OpenCL为cl.h提供了一个只有头文件的C++包装器,称为cl.hpp.它随附一些实现,但也可以从khronos.org获得,因为它只使用OpenCL库.
它包含很多模板和内联的东西,但也有这样的东西:
namespace cl
{
class Buffer : public Memory
{
Buffer (...stuff...)
{
// Constructor implementation
}
// ...
// Other Constructors and such
// ...
Buffer& operator= (const Buffer& rhs)
{
// implementation
}
// ...
Buffer createSubBuffer (...)
{
// implementation
}
}
}
Run Code Online (Sandbox Code Playgroud)
现在我的问题是:那些在类定义中但既不是内联也不是模板化的实现不应该违反一个定义规则吗?我在这里想念的是什么?
7.1.2/3:
类定义中定义的函数是内联函数.内联说明符不应出现在块作用域函数声明中.如果在朋友声明中使用了内联说明符,那么该声明应该是一个定义,或者该函数应该先前已内联声明.
3.2/4:
每个程序应该只包含该程序中使用的每个非内联函数或变量的一个定义 ; 无需诊断.该定义可以在程序中明确显示,可以在标准或用户定义的库中找到,或者(在适当的时候)隐式定义(见12.1,12.4和12.8).内联函数应在每个使用它的翻译单元中定义.
3.2/6:
可以有多个类类型的定义,枚举类型,带外部链接的内联函数(7.1.2),类模板,非静态函数模板,类模板的静态数据成员,类模板的成员函数,或模板专业化,如果程序中未指定某些模板参数,则每个定义出现在不同的翻译单元中,并且定义满足以下要求[...]