f được coi là một lớp - bạn có chức năng.
Xem dưới đây:
// Class acts like a function - also known as functor.
template<typename T, int a, int b>
class f
{
int operator()(T v)
{
return v*a-b; // just do something for example
}
};
template<typename T, int a, int b, template<typename,int,int> class func>
class C
{
int f()
{
return func<T,a,b>(3);
}
};
int main()
{
C<float,3,2, f> c;
}
... Và phiên bản chuyển thể nếu bạn cần để mã cổng di sản (điều chỉnh các chức năng để một lớp mẫu):
#include <iostream>
template<typename T, int a, int b>
int f(T v)
{
std::cout << "Called" << std::endl;
return v*a-b; // just do something for example
}
template<typename T, int a, int b, template<typename,int,int> class func>
struct C
{
int f()
{
return func<T,a,b>(3);
}
};
template <class T, int a, int b>
struct FuncAdapt
{
T x_;
template <class U>
FuncAdapt(U x)
: x_(x)
{}
operator int() const
{
return f<T,a,b>(x_);
}
};
int main()
{
C<float,3,2, FuncAdapt > c;
c.f();
}
Nguồn
2013-08-01 11:17:14
Chính xác bạn đang cố gắng đạt được điều gì? – nijansen
trình biên dịch của tôi bị lỗi khi thực thi mã này. – Saksham
@nijansen không phải là MSVS2010 ổn định ?? – Saksham