对于模糊的标题感到抱歉 - 我不知道如何简要描述我的问题。我一直在玩复合设计模式并遇到以下情况。说我有一个界面
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,构建应该会失败。但是,当我避免召唤它时,为什么它不会失败呢?
此外,如果我让数组继承接口,为什么构建失败?在这种情况下,无论我是否调用该方法,它都会发生。
如果有人能为我提供一些非常感激的见解。
谢谢,
答案 0 :(得分:1)
因为您没有调用它,所以编译器正在优化customArray.methodA
。