Re: Predicate with argument
On Feb 5, 3:52 pm, Ian Collins <ian-n...@hotmail.com> wrote:
Christopher wrote:
How do I use std::find_if with a predicate that takes an argument?
Include the value as a member of the predicate and initialise it in the
constructor.
For example:
struct CompareTag
{
const std::string& tag;
CompareTag( const std::string& tag ) : tag(tag) {}
bool operator()( const Node& node ) const
{
return node.name() == tag;
}
};
--
Ian Collins
I tried that and it doesn't it won't compile.
I must not be using it correctly.
Error "term does not evaluate to a function taking 0 arguments"
On the std::find_if line of code.
How do I use the predicate in this case?
Here is my code:
// Make a copy of the provided buffer pointers and remove them as
they are matched with the requirements and stored
std::vector<Buffer::SharedPtr> providedBuffers = vertexBuffers;
// Go though the requirements and look for a match from the
provided buffers
unsigned inputSlot = 0;
while( !requirements.empty() )
{
// Get the first requirement
std::string semanticName = requirements.front().SemanticName;
// Search for a buffer with a matching semantic name in the
provided buffers
CompareSemanticName comparator(semanticName);
std::vector<Buffer::SharedPtr> found =
std::find_if(providedBuffers.begin(), providedBuffers.end(),
comparator());
if( found == providedBuffers.end() )
{
// Cannot provide the required vertex buffer type
std::stringstream msg;
msg << "The provided vertexs buffers do not contain a vertex
buffer type required "
<< "by the chosen technique."
<< "\nSemanticName: " << semanticName;
throw BaseException(msg.str(),
"PassDescription::PassDescription(Pass & pass, const
std::vector<Buffer::SharedPtr> & vertexBuffers, const
Buffer::SharedPtr & indexBuffer, const D3D10_PRIMITIVE_TOPOLOGY
primitiveTopology)",
"PolygonSet3D.cpp");
}
// Loop under construction
}