我有两个伴随的函子,即它们成对出现
如果一个是doX()
,另一个将是undoX()
。
它们的声明如下:
template< typename T >
struct doSomething{
void operator()( T &x ) const {
.....
.....
.....
}
};
template< typename T >
struct undoSomething{
void operator()( T &x ) const {
.....
.....
.....
}
};
这些由类在其成员变量上使用。
如何将它们存储在可以传递给类的构造函数的std::pair中?
附言没有C++ 11或boost的解决方案将不胜感激。但我愿意将它们用作最后的手段
最佳答案
容器类:
struct Container
{
typedef int DoUndoType; // This is an example, the actual type will
// have to be decided by you.
// The constructor and its argument.
Container(std::pair<doSomething<DoUndoType>,
undoSomething<DoUndoType>> const& doUndoPair) : doUndoPair(doUndoPair) {}
std::pair<doSomething<DoUndoType>,
undoSomething<DoUndoType> doUndoPair;
};
容器类的使用:
// Construct an object.
Container c(std::make_pair(doSomething<Container::DoUndoType>(),
unDoSOmething<Container::DoUndoType>()));
// Use the pair.
int arg = 10;
c.doUndoPair.first(arg);
c.doUndoPair.second(arg);