我有以下可用的代码:
我知道对于int(或任何其他非类、结构体或联合类型),由于第二个模板参数中的expect成员函数,该代码不起作用。
我的问题是如何更改代码使其正常工作。我需要它以这种方式工作,以使我的holder类的使用变得简单。
我已经尝试过类型特征,并将成员函数指针移动到类的构造函数中,但没有成功。
有什么建议吗?提前感谢!
class person
{
private:
int age_;
public:
person() : age_(56) {}
void age(int a) { age_ = i; }
}
template < class T, void (T::* ...FUNC)(int) > class holder;
template < class T, void (T::*FUNC)(int)>
class holder<T, FUNC>
{
public:
typedef typename T::value_type value_type;
public:
explicit holder() : setter(FUNC) { std::cout << "func\n"; }
private:
std::function<void (value_type&, int)> setter;
};
template < class T>
class holder<T>
{
public:
explicit holder() { std::cout << "plain\n"; }
};
int main()
{
holder<person> h1;
holder<person, &person::age> h2;
// this does not work:
holder<int> h3;
}
我知道对于int(或任何其他非类、结构体或联合类型),由于第二个模板参数中的expect成员函数,该代码不起作用。
我的问题是如何更改代码使其正常工作。我需要它以这种方式工作,以使我的holder类的使用变得简单。
我已经尝试过类型特征,并将成员函数指针移动到类的构造函数中,但没有成功。
有什么建议吗?提前感谢!