由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问个构造函数的问题
相关主题
C++ online Test 一题发面经攒rp —— Bloomberg
c++问题问一个关于引用和指针的问题
请教一个C++的题目,谢谢c++ class default functions?
问2个以前版面的CS面试题问个C++ ctor的问题
C++ Q47: protected constructor (C39)【我自己写的LinkedList为什么总有错?】
leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}string permutation,怎么处理重复字母?
唉,随便贡献个phone interview面经吧。CS的。一道C/C++的面试题
请问:什么情况下singleton will fail?一道面试题
相关话题的讨论汇总
话题: args话题: template话题: class话题: arg
进入JobHunting版参与讨论
1 (共1页)
w*******t
发帖数: 62
1
看神贴看到一道题,想问问有什么好的解法?
Given two classes:
class B
{
public:
B(args_1);
B(args_2);
// and many constructors with different arg lists
};
class D : public B
{
public:
D(args_1) : B(args_1) {}
D(args_2) : B(args_2) {}
// and many constructors with different signatures similarly implemented
// some additional stuff specific to D
};
Assume that the arg list for B's constructors are quite long and may be
revised pretty often in the future, in which case D's constructors have
to be recoded correspondingly. Duplicating the update by copy-and-paste
will certainly work here. Can you propose a better way so that the
update can be done in one place without copy-and-paste duplication?
a***e
发帖数: 1140
2
template
w*******t
发帖数: 62
3
能举个例子说明一下吗? 谢谢了

【在 a***e 的大作中提到】
: template
a***e
发帖数: 1140
4
template
class B
{
public:
B(T arg) {}
};
template<>
class B
{
public:
B(T1 arg) {}
};
...
template
class D : public B
{
public:
D(T arg) : B(arg) {}
};
class D does not need to change.
suppose class B has other new c'tors, it just need to add specification
template class to refine it.
h*c
发帖数: 1859
5
我的理解是人家说
ctor的list太长,而且容易换,
你的这个好像没有解决这个问题

【在 a***e 的大作中提到】
: template
: class B
: {
: public:
: B(T arg) {}
: };
: template<>
: class B
: {
: public:

t****t
发帖数: 6806
6
呃, 看到第一个回贴我以为他懂的
看到第二个回贴我才知道他是装懂的
这个答案是这样的
class B
{
public:
B(args_1);
B(args_2);
// and many constructors with different arg lists
};
class D : public B
{
public:
template D(T args_1) : B(args_1) {}
template D(T1 args_1, T2 args_2) : B(args_1, args
_2) {}
/* ...按参数个数写出D::D的template */
};
并不是把B变成模板.
当然, 如果允许C++11的话, 就直接在D里写using B::B; 就可以了.
不过, 这个特性目前gcc还没支持. 如果用支持的特性, 可以用variadic template (
supported in gcc 4.3+), 这样就只要写一个模板就可以了, 不用按个数:
template D(T... args) : B(args...) {}

【在 h*c 的大作中提到】
: 我的理解是人家说
: ctor的list太长,而且容易换,
: 你的这个好像没有解决这个问题

w*******t
发帖数: 62
7
多谢~~
按参数个数写ctor,没想到啊。
当时看c++ prime的时候,看到derived class把base class参数列表又写一遍,就觉得
有点duplicated,以后base class要是改了,derived class也要跟着改。

【在 t****t 的大作中提到】
: 呃, 看到第一个回贴我以为他懂的
: 看到第二个回贴我才知道他是装懂的
: 这个答案是这样的
: class B
: {
: public:
: B(args_1);
: B(args_2);
: // and many constructors with different arg lists
: };

u**r
发帖数: 663
8
可以给args造个单独的class,然后B,D都只要一个构造函数就好了,至于args怎么变都
在args类里头处理好,这样对args的调整只要做一次。
前面thrust 给的答案能解释一下吗,看不懂,很少用template
w*******t
发帖数: 62
9
我的理解是,为不同个数的构造函数写一个template。比如说,有一个的,就写一个;
有两个的,就写两个。thrust的答案里就提到了这两种。再之后,有三个就写三个。
到用的时候,自动匹配相应个数的ctor。
不知道理解的对不对。

【在 u**r 的大作中提到】
: 可以给args造个单独的class,然后B,D都只要一个构造函数就好了,至于args怎么变都
: 在args类里头处理好,这样对args的调整只要做一次。
: 前面thrust 给的答案能解释一下吗,看不懂,很少用template

u**r
发帖数: 663
10
也就是说只要参数个数匹配,参数顺序可以通过调整template类型顺序实现。
那如果同时存在两个构造函数 B(int, double), B(double, int),是不是就不行了呢
?当然这种定义没啥实际意义。

【在 w*******t 的大作中提到】
: 我的理解是,为不同个数的构造函数写一个template。比如说,有一个的,就写一个;
: 有两个的,就写两个。thrust的答案里就提到了这两种。再之后,有三个就写三个。
: 到用的时候,自动匹配相应个数的ctor。
: 不知道理解的对不对。

相关主题
leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}发面经攒rp —— Bloomberg
唉,随便贡献个phone interview面经吧。CS的。问一个关于引用和指针的问题
请问:什么情况下singleton will fail?c++ class default functions?
进入JobHunting版参与讨论
r****t
发帖数: 10904
11
template 会自动 match 类型的。

【在 u**r 的大作中提到】
: 也就是说只要参数个数匹配,参数顺序可以通过调整template类型顺序实现。
: 那如果同时存在两个构造函数 B(int, double), B(double, int),是不是就不行了呢
: ?当然这种定义没啥实际意义。

t****t
发帖数: 6806
12
you are supposed to match D's ctor with B's, not changing B's ctor (that is,
changing the design) into one.
you need medium level introductory c++ book to learn template.

【在 u**r 的大作中提到】
: 可以给args造个单独的class,然后B,D都只要一个构造函数就好了,至于args怎么变都
: 在args类里头处理好,这样对args的调整只要做一次。
: 前面thrust 给的答案能解释一下吗,看不懂,很少用template

t****t
发帖数: 6806
13
correct.

【在 w*******t 的大作中提到】
: 我的理解是,为不同个数的构造函数写一个template。比如说,有一个的,就写一个;
: 有两个的,就写两个。thrust的答案里就提到了这两种。再之后,有三个就写三个。
: 到用的时候,自动匹配相应个数的ctor。
: 不知道理解的对不对。

t****t
发帖数: 6806
14
you don't need to "adjust template type order". template will generate
correct typed function (in this case, constructor) according to the
invocation (implicit instantiation), and that's exactly why template ever
existed.

【在 u**r 的大作中提到】
: 也就是说只要参数个数匹配,参数顺序可以通过调整template类型顺序实现。
: 那如果同时存在两个构造函数 B(int, double), B(double, int),是不是就不行了呢
: ?当然这种定义没啥实际意义。

b******i
发帖数: 914
15
我觉得utar的意思是,如果B里面本身存在参数个数相同,但implementation不同的多
个ctors,那么如果按照thrust的实现,在D里面,按照参数个数的话,相应template只
有一个。那么如何调用B里面多个不同的ctors呢?
另外,如果B的ctors参数个数也会be revised in the future,如其中参数最多的ctor从原来的10个参数
增加到100,D的实现里面岂不是要增加90个ctors?

【在 t****t 的大作中提到】
: you don't need to "adjust template type order". template will generate
: correct typed function (in this case, constructor) according to the
: invocation (implicit instantiation), and that's exactly why template ever
: existed.

t****t
发帖数: 6806
16
if the two constructors of B can be distinguished, then D's two
instantiations can be distinguished.
suppose you have
B::B(const char*, int);
B::B(int, const char*);
B::B(double, float);
and template:
template
D::D(T1 t1, T2 t2) : B(t1, t2) {}
you can write
B b1("abc", 1), b2(2, "def"), b3(1.234, 5.678f);
D d1("ABC", 3), d2(4, "DEF"), d3(10.987, 6.543f);
clear enough?
as for your other question, if you have a 100 parameter constructor, you do
have to write 100 parameter template for D as well. this should be extremely
rare though. besides you can still use variadic template i mentioned.

ctor从原来的10个参数

【在 b******i 的大作中提到】
: 我觉得utar的意思是,如果B里面本身存在参数个数相同,但implementation不同的多
: 个ctors,那么如果按照thrust的实现,在D里面,按照参数个数的话,相应template只
: 有一个。那么如何调用B里面多个不同的ctors呢?
: 另外,如果B的ctors参数个数也会be revised in the future,如其中参数最多的ctor从原来的10个参数
: 增加到100,D的实现里面岂不是要增加90个ctors?

1 (共1页)
进入JobHunting版参与讨论
相关主题
一道面试题C++ Q47: protected constructor (C39)
请教几个电面题leetcode上这个链表节点的定义是什么意思?ListNode(int x) : val(x), next(NULL) {}
问一道关于字符串的面试题唉,随便贡献个phone interview面经吧。CS的。
问一道面世题请问:什么情况下singleton will fail?
C++ online Test 一题发面经攒rp —— Bloomberg
c++问题问一个关于引用和指针的问题
请教一个C++的题目,谢谢c++ class default functions?
问2个以前版面的CS面试题问个C++ ctor的问题
相关话题的讨论汇总
话题: args话题: template话题: class话题: arg