C++ 是否可以调整输入参数以获取指针而不是引用?

C++ 是否可以调整输入参数以获取指针而不是引用?,c++,C++,我正在做一些类似于: std::vector<T> Ints; std::find_if(Ints.begin(),Ints.end(),f); bool f(T * input) std::vector Ints; std::find_if(Ints.begin(),Ints.end(),f); 布尔f(T*输入) 是否可以调整f以供查找模板在中使用?使用lambda: std::find_if(Ints.begin(), Ints.end(), [](const T&

我正在做一些类似于:

std::vector<T> Ints;
std::find_if(Ints.begin(),Ints.end(),f);

bool f(T * input)
std::vector Ints;
std::find_if(Ints.begin(),Ints.end(),f);
布尔f(T*输入)
是否可以调整f以供查找模板在中使用?

使用lambda:

std::find_if(Ints.begin(), Ints.end(), [](const T& t) { return f(&t); });
如果不能使用C++11,可以使用模板编写通用适配器:

template <typename T, bool (*predicate)(const T*)>
bool ReferenceToPointer(const T& t) { return predicate(&t); }

std::find_if(Ints.begin(), Ints.end(), ReferenceToPointer<int, f>);
模板
bool referencetopiner(const T&T){返回谓词(&T);}
std::find_if(Ints.begin()、Ints.end()、ReferenceToPointer);

如果您不能使用lambda表达式,并且您需要一个特殊的包装器,那么您始终可以执行以下操作

void your_func()
{
  struct hack
  {
    static void pred_wrap (int& i) { pred(&i); }
  };

  std::find_if(Ints.begin(),Ints.end(), hack::pred_wrap);
}

请注意,这不仅仅是一种黑客行为,我只提供了完整性。

否。编写模板是为了通过引用传递。你为什么这么在乎?出于所有意图和目的,这在这里是相同的。当然你的意思是
std::find_if
。我的意思是,如果,是的,我可以创建一个f2(const T&input){return f(&input)}但是我想知道是否有办法避免这种情况,我仍然不明白为什么它会有不同。这里的指针没有什么是引用所不能做的。是的,我知道,我只是想避免为此创建一个新函数。非常感谢Benjamin!因此,在这两种情况下都将创建一个新函数,很高兴知道没有办法避免这种情况