我知道这个问题与这篇文章非常相似,但是引用的文章是关于类模板参数推导的。这里我的问题是关于函数模板参数推导。
我目前有以下代码段,它使用户能够指定方法应使用的算法来计算某些值。(由于各种与此处不相关的原因,使用策略模式在这种情况下不适用)
#include <iostream>
#include <typeinfo>
template<typename T>
class BasicStrategy
{
public:
BasicStrategy(T& i_Input)
{
std::cout << "Applying Basic Strategy to type : " << typeid(T).name() << " With value : " << i_Input <<std::endl;
}
};
template<typename T>
class ComplexStrategy
{
public:
ComplexStrategy(T& i_Input)
{
std::cout << "Applying Complex Strategy to type : " << typeid(T).name() << " With value : " << i_Input <<std::endl;
}
};
template<typename T, typename STRATEGY = BasicStrategy<T>>
void Func(T& …Run Code Online (Sandbox Code Playgroud) 当通过引用函数传递数组时,例如:
void Foo(double (&MyList)[3]);
Run Code Online (Sandbox Code Playgroud)
当您尝试向此函数传递大小为 3 的数组时,代码将无法编译。根据我在 C++ 中的理解,一旦实例化,就无法知道数组的大小。
编译器如何能够跟踪数组的大小?为什么那么,如果它能够检查数组的大小,这样的代码仍然可以编译?
int MyTab[3]
MyTab[3] = 5;
Run Code Online (Sandbox Code Playgroud)