我想使用指向成员函数的决策消除进程所消耗的进程。我需要提供用户选项来打开或关闭在有限连续域上定义的函数的域检查。指向模板类中成员函数的指针
没有使用模板时,可以使用指向成员函数的指针。但是在这里我必须概括我的实现。
具体地说我在我的类三个成员函数:
1. value
是一个成员函数返回由function
指向部件计算出的值。 function
是一个函数指针,指向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
}
确切的错误是什么? – Shahbaz 2012-07-05 13:19:42
为什么不干脆......值(...) { 如果(domainValidation)返回的CheckedValue(...) 否则返回uncheckedValue(...) } – MadScientist 2012-07-05 13:22:22
@MadScientist,因为后来他要重用的功能没有每次都做'if'。 – Shahbaz 2012-07-05 13:27:05