template<typename T, size_t M, size_t K, size_t N, typename std::enable_if_t<std::is_floating_point<T>::value, T> = 0>
void fastor2d(){//...}
我从 cpp-reference 复制了这行代码(仅std::enable_if
部分,我确实需要T
和所有三个size_t
's),因为我只想在使用 float_types 时使用此函数......它无法编译。
有人可以向我解释一下为什么以及它的作用吗?当我这样做的时候,你之后如何调用这个函数?
这里关于 SO 的每个教程或问题都会被答案轰炸,这很好,但对于那些不了解正在发生的事情的人来说,即使这些也没有真正的帮助。(抱歉,如果可能有点激动或攻击性)
编辑:我非常感谢到目前为止的所有答案,我意识到我的措辞可能有点偏离...我理解模板参数是什么,并且知道运行时和编译时等之间的区别,但我只是无法得到一个好的掌握背后的语法std::enable_if
EDIT2:
template<typename T, size_t M, size_t K, size_t N, typename = std::enable_if_t<std::is_integral<T>::value>>
void fastor2d(){
Fastor::Tensor<T,M,K> A; A.randInt();
}
这实际上是我唯一需要改变的事情。注意 random() 部分
template<typename T, size_t M, size_t K, size_t N, typename = std::enable_if_t<std::is_floating_point<T>::value>>
void fastor2d(){
Fastor::Tensor<T,M,K> A; A.random();
}