从这个代码中:
// Example program
#include <iostream>
#include <string>
struct Z { static const int z = 1; };
struct Y { static const int y = 2; };
template <typename A> struct TE { int foo(); int bar(); };
template <> int TE<Y>::bar() { return foo(); }
template <typenam
我正在尝试定义基类,它只包含typedef的。
template<typename T>
class A
{
public:
typedef std::vector<T> Vec_t;
};
template<typename T>
class B : public A<T>
{
private:
Vec_t v; // fails - Vec_t is not recognized
};
为什么在B中我收到Vec_t无法识别的错误,并且我需要显式地编写它?
typename A<T>::Vec_t v;
我正在尝试找出为什么这个示例不能编译。我的理解是,如果没有显式设置静态变量,那么它的缺省值为0。在下面的五个示例中,其中四个的行为符合我的预期,但是被注释掉的那个不能编译。
#include <iostream>
class Foo
{
public:
static int i;
static int j;
};
template <int n>
class Bar
{
public:
Bar(int) { }
static int i;
};
static int i;
int Foo::i;
int Foo::j = 1;
tem
我需要在C++中编写一个模板化函数replace_all,它将接受字符串、wstring、glibmm::ustring等参数,并将subject中出现的所有search替换为replace。
replace_all.cc
template < class T >
T replace_all(
T const &search,
T const &replace,
T const &subject
) {
T result;
typename T::size_type done
这段代码是做什么的?为什么有两组构造函数参数?
class A(val x: Int)(val y: Int)
我可以初始化一个对象并使用这两个字段:
val a = new A(5)(7)
println(a.x + ", " + a.y)
如果我将其设置为case类,则只能通过第一组参数进行匹配。
case class A(x: Int)(y: Int)
val a = A(5)(7)
a match {
A(x) => println(x)
}
不可能创建3组参数。它不能编译。那么这两组构造函数参数的含义是什么呢?
template <bool, class t, class u>// why is bool here,class booltype=bool. Are they equivalent?
struct if_
{
typedef typename t type;
};
template<class t, class u>
struct if_<false, t, u> // what does the <false,t,u> mean?
{
typedef typename u type;
};
代码来自一篇名为
我有一个使用模板的多文件项目。
// Foo.h
template <class T>
class Foo
{
T bar;
};
我有一个类(例如Cup)和一组该类的子类。
// Cup.h
class Cup
{
};
class Chalice : public Cup
{
};
class SippyCup : public Cup
{
};
// ...etc.
在模板的.cpp文件中,我需要列出所有可能的模板实现,以避免链接器错误。这是我从那里学到的。
//Foo.cpp
template class Foo<Cup>;
template cl
下面我给出两个程序和它们的输出。
code1:
#include<iostream>
using namespace std;
template <class X,class Y> X sumargs(X a,Y b)
{
cout<<"\nThe sum is :" << a+b;
}
int sumargs(int a,char b)
{
cout<<"\nThis works\n";
return
当我玩模板时,我注意到一个奇怪的模板演绎失败,我想知道为什么这应该逻辑上失败。请检查此代码:
template<typename T = int>
struct A {
T v;
};
int main()
{
A k;
static_assert(std::is_same_v<decltype(k.v), int>);
}
此代码编译时没有任何问题,k.v将具有int类型,因为它被定义为模板参数的默认类型。下面的代码是:
template<typename T = int>
struct A {
T v;
};
stru
在下面的代码中,为什么T2会给出这个错误‘m_t’ was not declared in this scope,而TB是正常的?
我如何在T2中访问T1的成员,同时还在使用模板?
// All good
class TA
{
public:
TA() {}
protected:
int m_t;
};
class TB : public TA
{
public:
TB() {}
int get()
{ return m_t; }
protected:
};
// Error in T2
temp
在Linux中,我得到了
template max() is called
但在Windows下,我得到了
non-template max() is called
为什么?在Linux上,我用的是gcc 4.5,在Windows上,我用的是VS2008。
#include <iostream>
#include <vector>
template < typename T >
inline void max( const int& a, const T& b )
{
std::cout << "templa
下面是我的代码:
#include<iostream>
class foo;
template<typename T> void bar(T a) { std::cout<< a.var; }
class foo {
int var;
public:
friend void bar(foo); //here, bar function template is declared in global namescope,
// deduction can deduce which template instance
如果我做一个有模板头的比较器类;
template <typename Type>
int operatorCmp(Type v1, Type v2);
是否有可能在cpp文件中实现一些不同的operatorCmp实现,例如,获取类和节点等的实例?编译器会根据参数自动使用正确的operatorCmp实现吗?