我有以下代碼:返回模板結果
#include <array>
#include <iostream>
#include <typeinfo>
#include <type_traits>
#include <utility>
namespace impl
{
template <typename T>
struct Matrix_traits {
};
}
template <size_t M, size_t N, typename T>
class Matrix
{
};
template <size_t M, size_t N, typename T>
struct impl::Matrix_traits<Matrix<M, N, T>> {
template <typename U>
struct scalar_mult_type
{
// just for testing
using type = std::pair<std::array<T, M>, std::array<T, N>>;
};
};
int main()
{
Matrix<3, 4, char> m;
mult(3, m);
return 0;
}
當我用下面的函數實現,在那裏我明確指定返回類型:
template <typename T, typename U>
std::pair<std::array<char, 3>, std::array<char, 4>> mult(const T& lambda, const U& m)
{
typename impl::Matrix_traits<U>::scalar_mult_type<T>::type result;
std::cout << typeid(result).name() << "\tEUREKA!\n";
return result;
}
它的工作原理......但這顯然不是我想要的......但是當我試圖變得更加靈活時:
template <typename T, typename U>
typename impl::Matrix_traits<U>::scalar_mult_type<T>::type mult(const T& lambda, const U& m)
{
typename impl::Matrix_traits<U>::scalar_mult_type<T>::type result;
std::cout << typeid(result).name() << "\tEUREKA!\n";
return result;
}
我有「無法辨認模板聲明/定義「錯誤。 這對我來說是一個真正的難題。爲什麼同樣的聲明對局部變量'result'有效,但是作爲返回類型失敗了?
什麼是'結構IMPL :: Matrix_traits <矩陣>'什麼意思? –
SergeyA
您的'Matrix_Traits'在一種情況下采用一個模板參數,在另一種情況下爲3。你可以試着解釋一下你想要使用這些特質嗎? –
@SimonKraemer:第二種情況是(部分)專業化。 – Jarod42