如何使 C++ 中不同模板的函数表现不同?
How to make functions behave differently for different templates in C++?
我的 C++ 作业的一部分是为这个 main 创建 FooClass:
int main()
{
const int max = 10;
int x[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int> xl(x, max);
int x2[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int, std::greater<int> > xg( x2, max);
xl.sort();
xg.sort();
xl.print();
xg.print();
}
目标是使第一个排序升序,第二个排序降序:
0 1 7 9 10 11 20 21 54 91
91 54 21 20 11 10 9 7 1 0
到目前为止,这是我的代码:
template <typename T, typename F=std::greater<T>>
class FooClass
{
private:
T *mItems;
int mItemsSize;
bool mpermission;
public:
FooClass(T items[], int itemsSize)
{
this->mItemsSize = itemsSize;
this->mItems = items;
};
void print() const
{
for (int i = 0; i < mItemsSize; ++i)
{
std::cout << mItems[i] << " ";
}
std::cout << std::endl;
}
void sort()
{
std::sort(mItems, mItems + mItemsSize);
}
};
我的代码当前打印输出:
0 1 7 9 10 11 20 21 54 91
0 1 7 9 10 11 20 21 54 91
而且我正在努力使我的排序函数根据输入模板参数表现不同。有什么办法可以做到这一点吗?
首先,你没有使用F
。您需要将 F
的实例传递给 std::sort
:
void sort()
{
std::sort(mItems, mItems + mItemsSize, F{});
}
其次:您的默认 F
将使您示例中的两个实例以相同的方式对数组进行排序。要获得预期的结果,您应该使用 std::less<T>
代替默认值 F
。
template <typename T, typename F=std::less<T>>
class FooClass
{
//...
};
我的 C++ 作业的一部分是为这个 main 创建 FooClass:
int main()
{
const int max = 10;
int x[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int> xl(x, max);
int x2[] = {10, 20, 7, 9, 21, 11, 54, 91, 0, 1};
FooClass<int, std::greater<int> > xg( x2, max);
xl.sort();
xg.sort();
xl.print();
xg.print();
}
目标是使第一个排序升序,第二个排序降序:
0 1 7 9 10 11 20 21 54 91
91 54 21 20 11 10 9 7 1 0
到目前为止,这是我的代码:
template <typename T, typename F=std::greater<T>>
class FooClass
{
private:
T *mItems;
int mItemsSize;
bool mpermission;
public:
FooClass(T items[], int itemsSize)
{
this->mItemsSize = itemsSize;
this->mItems = items;
};
void print() const
{
for (int i = 0; i < mItemsSize; ++i)
{
std::cout << mItems[i] << " ";
}
std::cout << std::endl;
}
void sort()
{
std::sort(mItems, mItems + mItemsSize);
}
};
我的代码当前打印输出:
0 1 7 9 10 11 20 21 54 91
0 1 7 9 10 11 20 21 54 91
而且我正在努力使我的排序函数根据输入模板参数表现不同。有什么办法可以做到这一点吗?
首先,你没有使用F
。您需要将 F
的实例传递给 std::sort
:
void sort()
{
std::sort(mItems, mItems + mItemsSize, F{});
}
其次:您的默认 F
将使您示例中的两个实例以相同的方式对数组进行排序。要获得预期的结果,您应该使用 std::less<T>
代替默认值 F
。
template <typename T, typename F=std::less<T>>
class FooClass
{
//...
};