头文件中模板类实现的模板成员
Template member of template class implementation in header file
我有一个看起来像这样的类
template<class T>
class Matrix {
...
template<class T2> auto dot(Matrix<T2> const& other);
}
这是我的实现,在头文件中的声明下:
template<class T, class T2>
auto Matrix<T>::dot(Matrix<T2> const& other) {
[impl]
}
我得到的错误看起来像这样:
(C2244) 'Matrix<T>::dot' : unable to match function definition to an existing declaration
我哪里做错了?
语法错误。您有一个带有模板参数的函数模板,T2
在具有模板参数 T
的类模板中。 它必须这样定义:
template<class T>
template<class T2>
auto Matrix<T>::dot(Matrix<T2> const& other) {
}
这不是一个答案,而是这个(类似(问题的重复——类首先被定义/声明,编译器就可以了:
template<typename UnsignedInt,
std::enable_if_t<std::is_unsigned<UnsignedInt>::value, int> = 0>
class binangle {
...
template<typename F>
void set_from_degrees(F rad);
...
然而,当它与实施
有关时template<typename F>
void binangle<UnsignedInt>::set_from_radians(F rad) {
static_assert(std::is_unsigned<UnsignedInt>::value);
static_assert(std::is_floating_point<F>::value);
...
它抛出错误:
/home/sipan/src/vgit/signals/tests/../include/binangles_impl.hpp:23:51: error: invalid use of incomplete type ‘class signals::binangle<UnsignedInt>’
23 | void binangle<UnsignedInt>::set_from_radians(F rad) {
| ^
这是尽可能接近教科书exaMPLE
//template member definition
template<typename T>
template<typename T2>
void A<T>::f(T2)
{
// some code
}
但它失败了。
相关文章:
- 三向比较运算符成员与非成员实现
- 多次实现成员功能
- 可以具有不同基成员实现的类的最佳实现
- 如何为非常量和常量重载实现一次成员函数?
- 基于自定义void_t实现的成员检测
- 将C++子类成员函数(虚拟实现)传递给 C 类型函数指针
- C++ 20 中的运算符 == 和 <=> 应该作为成员还是自由函数实现?
- 如何为具有私有成员的派生类实现移动构造函数
- 在C++中实现类似 python "map"函数的问题:调用类成员函数
- 在C++中使用链表的堆栈实现中,访问结构体headNode成员count和top会导致运行时错误
- C++ 入门 12.1:我可以在类中使用静态向量成员实现 StrBlob<string> 吗?
- 使用 PIMPL 惯用法,实现是否应始终是类的私有成员?
- 如何将已实现的虚拟成员函数作为参数传递
- std::add_pointer 非静态成员函数的实现
- 为什么在std::optional的某些实现中有一个虚拟工会成员?
- 成员功能C 的不同实现
- 在.cpp文件中实现时访问私有成员
- 是否可以使用抛出交换成员实现?
- 如何在cpp文件中为多个类型创建模板类成员实现?
- 用int成员实现哪些操作符