C++预处理器+检测对象类型和new操作

标签 c++ c-preprocessor decltype

我目前在我的代码中有这个。

template<typename T1> class MONEYTRANSFER {
  SOURCEACCOUNT<T1, MONEYTRANSFER> *SourceAccount;               // Line 2
  MONEYTRANSFER(T1 *src) {
    SourceAccount = new (src) SOURCEACCOUNT<T1, MONEYTRANSFER>;  // Line 4
  }
};

虽然我知道这并没有那么乱,但我想至少尝试让它看起来更漂亮一些。

是否可以更改第 2 行,以便通过知道它属于哪个类别来自动检测“MONEYTRANSFER”?

第 4 行是否可以使用预处理器。所以我可以输入 bind(src, SourceAccount); - 无需输入 SourceAccount (SOURCEACCOUNT<T1, MONEYTRANSFER>) 的类型用于新操作。

我试过了 decltype但没有运气?任何帮助将不胜感激!

最佳答案

我会用基类混合来解决它:

template<typename T1, typename T2> class WithSourceAccount
{
  protected:
    SourceAccount<T1, T2>* m_SourceAccount;
    WithSourceAccount(T1* src) 
        : m_SourceAccount(new (src) SourceAccount<T1, T2>())
        { }
};

template<typename T1>
class MoneyTransfer : WithSourceAccount<T1, MoneyTransfer>
{
};

关于C++预处理器+检测对象类型和new操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11386432/

相关文章:

c++ - 在 eigen 中为顶点着色器设置投影、模型和 View 变换

c++ - 将数据从 stringstream 存储到 unsigned long 中的可能方法是什么?

C 编程指令 #include<stdio.h> printf

C/C++ 预处理器指令检查已定义且字符串不为空

c++ - 检测函数参数类型

c++ - MS Visual C++ 运行时库 - 有什么用?

c++ - boost::asio::read_at :有什么例子吗?

c++ - C 预处理器防护?

c++ - C 等效于 C++ decltype

c++ - 给定一个迭代器,声明一个具有正确 size_type 的索引