[英]Pointer to member function in template class
我想消除使用成员函数指针进行决策所消耗的过程。 我需要为用户提供选项,以打开或关闭在有限的延续域上定义的功能的域检查。
不使用模板时可以使用指向成员函数的指针。 但是在这里,我必须概括一下我的实现。
具体来说,我班上有三个成员函数:
1. value
是一个成员函数,返回由function
指向的成员计算的值。 该function
是一个函数指针,它checkedValue
或者指向checkedValue
或uncheckedValue
。 2. checkedValue
是一个成员函数,如果输入在指定范围内,则该函数将计算并返回结果。 否则抛出std :: domain错误。 3. uncheckedValue
计算并返回结果,而与域无关。
template <typename T>
class IO
{
private:
typedef T (IO<T>::*functionPtr)(const std::string& name, const T& input) const;
functionPtr function;
bool domainValidation;
void setDomainValidation(const bool& value);
//...
public:
// ...
T value(const std::string& name, const T& input) const;
T uncheckedValue(const std::string& name, const T& input) const;
T checkedValue(const size_t& index, const T &input) const;
};
// Implementation:
template <typename T>
void IO<T>::setDomainValidation(const bool &value)
{
domainValidation = value;
if(domainValidation)
{
// function points to checkedValue()
function = & IO<T>::checkedValue; // Here I got undefinded reference error
}
else
{
// function points to uncheckedValue()
}
}
template <typename T>
T IO<T>::value(const string &name, const T &input) const
{
return (this->*function)(name,input);
}
template <typename T>
T IO<T>::uncheckedValue(const string &name, const T &input) const
{
// simply calculate and return the result
}
template <typename T>
T IO<T>::checkedValue(const string &name, const T &input) const
{
// if input is in domain, calculate and return the result
// else throw a std::domain error
}
这对我来说似乎是一个错字:函数指针的函数签名是
...(const std::string &, const T &) ...
CheckedValue的签名是
...(const size_t &, const & T) ...
如果更改了签名以匹配函数指针,则代码示例将为我编译。 关于性能:您是否确定(如分析或查看程序集一样)值方法中的简单if子句比通过函数指针进行的(可能的)间接操作差? 显然,不能内联对checked或uncheckedValue的调用。
您的功能已签名
T checkedValue(const size_t& index, const T &input) const;
但不是
T IO<T>::checkedValue(const string &name, const T &input) const;
请注意第一个参数的类型之间的差异。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.