【发布时间】:2026-02-01 16:50:01
【问题描述】:
我写了一个快速的方法来将 std::vectors 从一种类型转换为另一种类型:
template<class A, class B>
vector<B> ConvertSTDVector_AToB(vector<A> vector)
{
vector<B> converted_vector;
for(unsigned int i= 0; i< vector.size(); i++)
converted_vector.push_back(vector[i]);
return converted_vector;
}
但编译器在左括号后的行上显示“错误 C2275:'B':非法使用此类型作为表达式”。起初我以为“B”是在其他地方定义的,但是更改两个模板类型名称会导致相同的错误。然后我认为这些类型发生了一些奇怪的事情。但即使将两个模板参数都设为整数也不会改变任何东西。
我一辈子都看不出这种方法有什么问题。 (虽然我觉得我可能只是对一些显而易见的事情视而不见)。
【问题讨论】:
-
这重新定义了
vector的含义:vector<A> vector。它不是命名类型,而是命名函数参数。替换为vector<A> v,代码应该可以编译(demo)。 -
所以你故意改造
std::transform? -
@WhozCraig 或
std::copy:)。 -
@WhozCraig 更像
std::copy没有显式转换? -
@pmr 我认为有一半的标准库算法可以用来执行此操作,现在我考虑得更多。我喜欢布赖恩的=P