C ++ Template Array类:错误生成取决于它是否继承接口

时间:2016-12-01 13:08:19

标签: c++ templates inheritance interface

对于模糊的标题感到抱歉 - 我不知道如何简要描述我的问题。我一直在玩复合设计模式并遇到以下情况。说我有一个界面

text = str(post.selftext)
title = await client.send_message(message.author, str(post.title))
if len(text) > 1990:
    amountsplit = math.ceil(len(text) / 1990)
    atatime = math.floor(len(text) / amountsplit)
    donetimes = 0
    lastone = 0
    for i in range(amountsplit):
        todonow = int(donetimes + 1) * atatime
        tmp = await client.send_message(message.author, str(text[lastone:todonow]))
        lastone = todonow
        donetimes += 1

并说我有一个坚持这个界面的模板类(这只是一个简单的例子,我知道它没有多大意义)。

class interface
{
public:
   virtual ~interface() { }
   virtual void methodA(const uint8_t* ptr) = 0;
};

请注意,模板类不会继承该接口。现在,如果我定义一些简单的类

template <typename T>
class customArray
{
public:
   void methodA(const uint8_t* ptr)
   {
      if (m_data.size())
         m_data[0].methodA(ptr);
   }

   int methodB(uint8_t* ptr)
   {
      if (m_data.size())
         return m_data[0].methodB(ptr);

      return 0;
   }

   void push_back(const T& elm)
   {
      m_data.push_back(elm);
   }

private:
   std::vector<T> m_data;
};

并像这样使用

class customPrimitive
{
public:
   int methodB(uint8_t* ptr)
   {
      (void)ptr;
      return -1337;
   }
};

显然,如果我尝试调用methodA,构建应该会失败。但是,当我避免召唤它时,为什么它不会失败呢?

此外,如果我让数组继承接口,为什么构建失败?在这种情况下,无论我是否调用该方法,它都会发生。

如果有人能为我提供一些非常感激的见解。

谢谢,

1 个答案:

答案 0 :(得分:1)

因为您没有调用它,所以编译器正在优化customArray.methodA