C++ 这一代码行推断了什么?

C++ 这一代码行推断了什么?,c++,std,C++,Std,我知道,std::pair将两种不同/相同的日期类型配对。如果按下图所示使用,说明什么?在这种情况下,它有什么用处 class A : public B<std::pair<long double, long double>> A类:公共B类 谢谢。不知道A和B背后的语义,不能说任何具体的东西 一个例子:假设你想要一对向量双值。您可以为它创建一个结构(如果这对代码中有语义),或者,只需将其定义为std::vector 现在,如果想扩展这个std::vector类(出于

我知道,
std::pair
将两种不同/相同的日期类型配对。如果按下图所示使用,说明什么?在这种情况下,它有什么用处

class A : public B<std::pair<long double, long double>>
A类:公共B类

谢谢。

不知道A和B背后的语义,不能说任何具体的东西

一个例子:假设你想要一对向量<代码>双值。您可以为它创建一个结构(如果这对代码中有语义),或者,只需将其定义为

std::vector

现在,如果想扩展这个
std::vector
类(出于某种原因…我不推荐),可以将其定义为:

template<class T>
class MyVector : public std::vector<T> {
    // ...
};
typedef MyVector<std::pair<long double, long double> > MyVectorOfPairsOfDoubles;
模板
类MyVector:public std::vector{
// ...
};
typedef MyVector myvectorOfPairsofDouble;
或者以非通用的方式(我发现更糟):

类MyVectorOfPairsOfDoubles:public std::vector { // ... }; 这与您提供的示例类似


但这只是一个例子。。。在你进一步描述之前,我无法说出你所提到的特定设计的优点或缺点(例如,A和B是什么?)。

不能说任何具体的东西,不知道A和B背后的语义

一个例子:假设你想要一对向量<代码>双值。您可以为它创建一个结构(如果这对代码中有语义),或者,只需将其定义为

std::vector

现在,如果想扩展这个
std::vector
类(出于某种原因…我不推荐),可以将其定义为:

template<class T>
class MyVector : public std::vector<T> {
    // ...
};
typedef MyVector<std::pair<long double, long double> > MyVectorOfPairsOfDoubles;
模板
类MyVector:public std::vector{
// ...
};
typedef MyVector myvectorOfPairsofDouble;
或者以非通用的方式(我发现更糟):

类MyVectorOfPairsOfDoubles:public std::vector { // ... }; 这与您提供的示例类似


但这只是一个例子。。。在你进一步描述之前,我无法说出你所提到的特定设计的优点或缺点(例如,什么是A,什么是B?)

它推断出
B
是A,而
A
B
的特化,它与
长双倍体一起工作

该模式的一个可能用途是通用实现。在这种情况下,您将基于
长双精度
(有时比
浮点
或普通
双精度
更精确,但更大)从泛型
复杂
类型派生类:


它推断
B
是a,并且
a
B
的特化,该特化与
长双倍体一起工作

该模式的一个可能用途是通用实现。在这种情况下,您将基于
长双精度
(有时比
浮点
或普通
双精度
更精确,但更大)从泛型
复杂
类型派生类:


除非您使用C++0x,否则它不会编译,因为
>
被贪婪地解析为意味着位右移。还有:我不知道你在问什么。这意味着
A
公开扩展了某个模板
B
,该模板以
std::pair
作为参数实例化……但这个答案并没有太大帮助。特拉维斯说的。“在这种情况下,它有什么用处?”->如果没有其他信息,我们如何回答这个问题?这个问题至少需要一些背景!如果你了解基本的C++模板语法,这个问题就没有意义了,因为它是绝对不完整的(什么是B?)@特拉维斯,通常不需要C++ 0x,好的编译器有“正确的”<代码> > /COD>解析,作为编译器扩展提供。嗯,至少G++是:)。@Kos,@Pedro:是的,但它还不是标准的一部分!除非您使用C++0x,否则它不会编译,因为
>
被贪婪地解析为意味着位右移。还有:我不知道你在问什么。这意味着
A
公开扩展了某个模板
B
,该模板以
std::pair
作为参数实例化……但这个答案并没有太大帮助。特拉维斯说的。“在这种情况下,它有什么用处?”->如果没有其他信息,我们如何回答这个问题?这个问题至少需要一些背景!如果你了解基本的C++模板语法,这个问题就没有意义了,因为它是绝对不完整的(什么是B?)@特拉维斯,通常不需要C++ 0x,好的编译器有“正确的”<代码> > /COD>解析,作为编译器扩展提供。嗯,至少G++是:)。@Kos,@Pedro:是的,但它还不是标准的一部分!请注意“>”字符之间的空格。这是区分
>>
运算符所必需的。请注意'>'字符之间的空格。这是区别于
>
运算符所必需的。
class PreciseComplex
: public GenericComplex<std::pair<long double, long double> >
{
};
class FastComplex
: public GenericComplex<YourFasterPair<float, float> >
{
};