簡體   English   中英

類模板專門化時的前向聲明

[英]forward declaration at class template specialisation

在類模板專用化階段,以下正向聲明是合法的C ++代碼嗎?

template<typename>
struct Basic
{};

template<>
struct Basic<struct Foo> //<-- Fwd declaration?
{};

struct Foo
{
    Basic<Foo> m_a;
};

int main()
{
    Foo test;
}

確實可以編譯 ,但是我不確定它是否合法

template<>
struct Basic<struct Foo>
{};

是合法的。

C ++ 11 Standard

類聲明將類名引入聲明它的作用域中,並在封閉的作用域中隱藏該類的任何類,變量,函數或其他聲明。

是的,它是合法的C ++,並且確實向前聲明了struct Foo

您也可以在函數聲明中執行此操作:

void fun(struct foo);

struct foo {};

void fun(struct foo) {}

或帶有指針。

struct foo* pointer;
struct foo {};

基本上在不需要完整類型的任何地方。 (也適用於class 。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM