我想创建只能用作完整类型,不能用作成员变量类型的类型。

因此,应允许这种T类型:

T a;
^^^
int foo(T b);
        ^^^
struct C { int foo(T b); };
                   ^^^
int main() { T c; }
             ^^^

但这会导致编译时错误:
struct C { T a; };
           ^^^

我非常想介绍到目前为止我尝试过的所有内容,但是没有什么可以至少接近我需要的解决方案了,对此感到抱歉。

当然,我也接受答案,证明这在C++中是不可能的。

我为什么需要这个?我想要的smart pointer不能是另一个对象的元素。防止循环依赖的不良方法...

最佳答案

你不能从C++语法(强调是我的,为清楚起见,未省略相关部分),函数的声明为:
function-definition:
decl-specifier-seq declarator ctor-initializer function-body
decl-specifier-seq declarator function-try-block

对于一个类,它是:
class-specifier:
class-head { member-specification }

member-specification:
member-declaration member-specification
access-specifier : member-specification

member-declaration:
decl-specifier-seq member-declarator-list ;
function-definition
nested-name-specifier template unqualified-id ;
using-declaration
template-declaration
member-declarator-list:
member-declarator
member-declarator-list , member-declarator

member-declarator:
declarator pure-specifier
declarator constant-initializer
identifieropt : constant-expression

最后declarator是:
declarator:
direct-declarator
ptr-operator declarator

direct-declarator:
declarator-id
direct-declarator ( parameter-declaration-clause ) cv-qualifier-seq
exception-specification
direct-declarator [ constant-expression ]
( declarator )

如您所见,可以用于函数参数的类型也可以用作类成员。

10-01 11:45