Click here to Skip to main content
15,888,579 members
Please Sign up or sign in to vote.
0.00/5 (No votes)
See more:
I want to do something like this

<br />
template <typename T, typename IncrementorT = [] (T& val) -> T& {val++; return val;} ><br />
class RangeAllocator...<br />


where IncrementorT is a user replaceable functor that RangeAllocator will use to increment values. I know I can do it using a struct but I'm interested to play with the new c++11 toys.
Posted
Comments
Maximilien 1-May-13 8:23am    
Dear mother of god!!!
Volynsky Alex 1-May-13 10:01am    
Let's read the following post:
http://stackoverflow.com/questions/3575901/can-lambda-functions-be-templated
jsolutions_uk 1-May-13 10:11am    
just beat me to it :)
Volynsky Alex 1-May-13 11:17am    
:)

I'm not sure it is possible with lambdas, it's looking rather like a polymorphic lambda. check here[^]. I just don't think lambdas were intended to be used in the context of template based generic programming.

The closest I have managed to get to implementing what you have above is this:

C++
template <typename T>
T& func(T& val)
{
    val++; 
    return val;
}

template <typename T, T&(*Func)(T&) = func<T>>
class SomeClass
{
public:

    SomeClass() : val(0) {};
    void CallIt()
    {
        std::cout << "val before call = " << val << std::endl;
        Func(val);
        std::cout << "val after call = " << val << std::endl;
    }
private:
    T val;  
};

int main(int argc, char* argv[])
{
    SomeClass<int> instance;
    instance.CallIt();

	return 0;
}


But then that doesn't help with your original question wrt playing around with lambdas, and it is also probably just as simple to use a functor in my particular example.

I'd love to here if someone managed to do this, or by using std::function as a wrapper for a lambda.
 
Share this answer
 
v2
I know you can use functions as template parameters[^]. I suppose it could work with lambdas, but I have not tried myself.
 
Share this answer
 

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900