在下面的簡化代碼,我嘗試這樣:上溯造型上的功能參數模板對象失敗
struct A{};
struct B : public A {};
void func(A &a) {}
B b;
func(b);
通常,這是工作,但在下面的更復雜的代碼它不工作。 我想我錯過了模板上的東西。
爲什麼不可能從DenseVector<container_reference<std::array<double, 25ull>>>
改爲container_reference<std::array<double, 25ull> >&
?因爲你試圖綁定臨時container_reference
從row
返回在調用swap
#include <iostream>
#include <vector>
#include <array>
#include <cassert>
using namespace std;
template<class C>
struct container_reference
{
typedef typename C::iterator iterator;
container_reference(iterator f, iterator e) : f(f), e(e) {}
void swap(container_reference &c) { std::swap(*f, *(c.f)); /*...and more*/ }
iterator f,e;
};
template<typename C>
struct DenseVector : public C { using C::C; };
template<typename C>
struct DenseMatrixRect
{
typedef DenseVector<container_reference<C>> row_vector;
row_vector row(unsigned int i)
{
auto it = container.begin() + i * width;
return row_vector(it, it + width);
}
C container;
unsigned int width;
};
int main()
{
DenseMatrixRect<std::array<double, 25>> m; m.width = 5;
m.row(0).swap(m.row(1));
return 0;
}
_「沒有關係」 t work「_非常模糊。它怎麼不起作用?你有編譯器錯誤嗎?它會崩潰嗎?你有錯誤的價值嗎? –
我完成了缺少的部分。無法將DenseVector:public C'轉換爲'C'。 –
Chameleon