【发布时间】:2012-07-05 21:39:37
【问题描述】:
我想使用指向成员函数的指针来消除决策所消耗的过程。我需要为用户提供选项以打开或关闭在有限连续域上定义的功能的域检查。
不使用模板时,可以有指向成员函数的指针。但在这里我必须概括一下我的实现。
具体来说,我的班级中有三个成员函数:
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
}
【问题讨论】:
-
确切的错误是什么?
-
为什么不简单... value(...) { if (domainValidation) return checkedValue(...) else return uncheckedValue(...) }
-
@MadScientist,因为后来他想重用该功能,而不是每次都执行
if。 -
@MadScientist 因为
value将被调用数百万次!我不想浪费时间检查domainValidation,它只设置一次(启动时间)。
标签: c++ templates function-pointers