Предположим, у меня есть шаблонный класс DataProcessor, который содержит интеллектуальный указатель на обработанные данные с оператором * и оператором ->:
template <class DataPointer>
class DataProcessor
{
public:
//it is not clear how to implement the constructor
//DataProcessor(DataPointer p) : pData(p) {};
void Process() { /* do something with *pData */ };
private:
DataPointer pData;
}
Как реализовать конструктор, чтобы DataProcessor работал с обоими стандартными переменными:: unique_ptr (конструктор должен принять его с помощью && и переместить его) и std :: shared_ptr (конструктор должен принять его с помощью & и скопировать его)?Возможно ли иметь какой-то унифицированный конструктор?
На самом деле у меня есть класс, который содержит умные Win32-дескрипторы UniqueHandle и SharedHandle, которые имеют похожую семантику, такую как std :: unique_ptr и std :: shared_ptr.Так что это общий вопрос о том, как реализовать такой сценарий.