Click here to Skip to main content
Rate this: bad
good
Please Sign up or sign in to vote.
See more: C++ C++11 Lambda
I want to do something like this
 

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

 
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 30-Apr-13 21:48pm
_Josh_53.3K
Comments
Maximilien at 1-May-13 8:23am
   
Dear mother of god!!!
Volynsky Alex at 1-May-13 10:01am
   
Let's read the following post:
http://stackoverflow.com/questions/3575901/can-lambda-functions-be-templated
jsolutions_uk at 1-May-13 10:11am
   
just beat me to it :)
Volynsky Alex at 1-May-13 11:17am
   
:)
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 1

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:
 
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.
  Permalink  
v2
Rate this: bad
good
Please Sign up or sign in to vote.

Solution 2

I know you can use functions as template parameters[^]. I suppose it could work with lambdas, but I have not tried myself.
  Permalink  

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

  Print Answers RSS
0 DamithSL 280
1 BillWoodruff 170
2 Zoltán Zörgő 170
3 OriginalGriff 134
4 Sergey Alexandrovich Kryukov 120
0 OriginalGriff 7,760
1 DamithSL 5,874
2 Sergey Alexandrovich Kryukov 5,444
3 Maciej Los 5,076
4 Kornfeld Eliyahu Peter 4,539


Advertise | Privacy | Mobile
Web03 | 2.8.141223.1 | Last Updated 2 May 2013
Copyright © CodeProject, 1999-2014
All Rights Reserved. Terms of Service
Layout: fixed | fluid

CodeProject, 503-250 Ferrand Drive Toronto Ontario, M3C 3G8 Canada +1 416-849-8900 x 100