Closed Mq-b closed 9 months ago
@frederick-vs-ja
即知道父类是谁,可以访问父类
不知道父类
我有点想改成
届时可以确定父类是否有
f
函数无法查找父类的定义
注意我们需要区别基类是否为待决的:
template<class T>
struct base {
static constexpr bool get_value() noexcept { return true; }
};
template<class T>
struct derived1 : base<int> {
void test() const
{
static_assert(get_value()); // OK
}
};
template<class T>
struct derived2 : base<T> {
void test() const
{
// static_assert(get_value()); // Bad
static_assert(this->get_value()); // this-> required
}
};
还有就是我们可能应该说 this->f()
中的 f
是待决名,而非整个构造是待决名。 this->f()
整体是待决调用。
届时可以确定父类是否有 f 函数
无法查找父类的定义
很好。
还有就是我们可能应该说 this->f() 中的 f 是待决名,而非整个构造是待决名。 this->f() 整体是待决调用。
“应该说 this->f() 中的 f 是待决名”,但是这不好描述 f()
和 this->f()
调用的区别,容易让人理解为单独的 f()
也是待决名。
原文:
是否需要修改掉 “即知道父类是谁,可以访问父类”、“不知道父类”这种不严谨的说法。
我感觉其实是上面概念中的最后一句话:
这句话可以解释为什么
f()
非待决名进行无限定名字查找找不到父类,因为它取决于模板形参,还未实例化。this->f()
是待决名,查找会推迟到得知它模板实参之时,此时父类不再取决于模板形参,已经实例化了,就没有上面说的那个问题了。这是否合理?