Click here to Skip to main content
11,577,443 members (61,151 online)
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 20:48pm
_Josh_53.4K
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 180
1 Afzaal Ahmad Zeeshan 125
2 OriginalGriff 115
3 Richard MacCutchan 100
4 Abhinav S 90
0 OriginalGriff 820
1 Sergey Alexandrovich Kryukov 681
2 Abhinav S 528
3 F-ES Sitecore 420
4 Suvendu Shekhar Giri 375


Advertise | Privacy | Mobile
Web03 | 2.8.150603.1 | Last Updated 2 May 2013
Copyright © CodeProject, 1999-2015
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