为什么在调用此函数之前需要指定“模板”?

时间:2020-04-28 22:31:16

标签: c++ templates

我在gf192.hpp中有一个函数定义如下:

template<mp_size_t n>
static constexpr bigint<n> field_char() { return bigint<n>(2); }

在类gf192中,该类本身没有模板参数。 bigint是带有模板参数的自定义类。然后,我尝试在test_all_fields.cpp中调用此函数:

template<typename FieldT>
void test_binary_field()
{
    // ...
    const bigint<1> characteristic = FieldT::field_char<1>();
    EXPECT_EQ(characteristic, bigint<1>(2));
}

但是,它具有以下编译错误:

/Users/.../test_all_fields.cpp:273:46: fatal error: 
      missing 'template' keyword prior to dependent template name 'field_char'
    const bigint<1> characteristic = FieldT::field_char<1>();
                                             ^         ~~~

我通过更改代码来解决此问题:

template<typename FieldT>
void test_binary_field()
{
    // ...
    const bigint<1> characteristic = FieldT::template field_char<1>();
    EXPECT_EQ(characteristic, bigint<1>(2));
}

但是我想知道为什么会这样。之前调用模板函数时,我从来不需要指定template

0 个答案:

没有答案