【发布时间】:2017-01-02 09:37:59
【问题描述】:
我有一个矩阵类模板如下:
template<typename T, std::size_t nrows, std::size_t ncols>
class Matrix
{
T data[nrows][ncols];
public:
T& operator ()(std::size_t i, std::size_t j)
{
return data[i][j];
}
};
我想要的是仅在编译时 nrows==ncols 为 true 时为实例化定义一个 .setIdentity() 函数。当nrows==ncols 为false 时,.setIdentity() 将没有定义。
我正在尝试使用enable_if idiom,但这将为所有情况定义函数。不是吗?
【问题讨论】:
-
也许不是有条件地改变现有对象,而是有一个像
make_identity<typename T, std::size_t N>这样的静态函数,它返回一个Matrix<T, N, N>。 -
@GManNickG:到目前为止最喜欢的解决方案(因为它是最简单的!)。请考虑将其添加为答案。
标签: c++ class templates c++11 template-specialization