One problem I've come accross in designing a specific version of auto_ptr
is that I have to disntiguish between "polymorphi c" arguments and "plain" ones,
because the template has to, internally, cast to void *.
Specifically,
template <typename T> void f(T * t) {
void * p = dynamic_cast<vo id *>(t) ;
}
will not compile if T isn't of a class that has somewhere at least
a virtual function. In particular, none of the STL containers do qualify
for T.
Yet, because of multiple inheritance, if I want to get down to the base
"most" class, the dynamic_cast<vo id*> is the way to go.
I could use reinterpret_cas t instead, and this would work for all T,
except that I'd lose the "cast to base" feature mentionned above.
I could also use a pair of templates, one for polymorphic types,
and one of "POD". But I'd rather not do that.
I'd be happy with a runtime query ... if I could devise one, that is.
typeid() seems to not be applicable in this context.
Ideally, if I could come up with
template <typename T>
bool is_polymorphic( T t) {
...
}
I would be filled with joy :-)
Any taker?
--
JFB
Jul 23 '05
20 2227 And the size of T1 could be bigger then the size of T, even it T is a polymorphic type, since the compiler might want to give T1 a different address then the copy of T that T1 contains. The compiler isn't required to do so, but I don't think that there is any rule that forbids it either.
I don't understand the issue. The only vague hint that I can see is if T is some MI composite, in which case an intermediate and empty T0 deriving from T, and from which both T1 and T2 would derive, could solve the issue?
-- JFB
Hm. Ok, I think I messed up my neural pathways there. Normally the
compiler should append T1's data to T. But isn't it possible that
the compiler is so very much stupid, that it wants to give T1 some
additional data? Just because he feels like doing so?
Anyway, the T1 and T2 (without T0) method should be fine, and it's
the very thing boost does. Only they append 256 bytes IIRC. This thread has been closed and replies have been disabled. Please start a new discussion. Similar topics |
by: Vince C. |
last post by:
Hi all,
I've created XML documents that are described with a schema. I'm using those
documents to create web pages.
All my web pages contain a fixed header and a variable document part. The
header is the same in each page and is described in an XML document,
"Head.xml". The document part, which is variable in content, is described in
other XML files (e.g. "Document.xml", "Product.xml", "Register.xml").
|
by: Kai-Uwe Bux |
last post by:
Hi,
I have determined that replacing T* by pointer_to<T> is a good idea:
(a) If the template signature is actually
template < typename T, typename Alloc=some_standard_allocator<T> >
class pointer_to {
...
|
by: Mr. Ed |
last post by:
I have a base class which has about 150 derived classes. Most of the
derived classes are very similar, and many don't change the base class
at all. All the derived classes have a unique factory method which
returns a new object of the derived type.
The problem I've got is that I now need to polymorphically clone a
derived class object, but I don't want to write a separate 'clone'
method for each of these 150 classes. Instead, I thought I...
|
by: Chad |
last post by:
The problem is:
Write a recursive version of the function reverse(s), which reverses
the string s in place.
In "The C Answer Book", Second Edition, near the bottom of page 95, the
authors say
"This is not a good application of recursion". Just for the record, I
did make an attempt at the solution before I broke down and looked at
the solution in the book.
|
by: sarathy |
last post by:
Hi all,
I need a small clarification reg. Templates and
Polymorphism. I believe templates is really a good feature, which can
be used to implement generic functions and classes. But i doubt whether
it should not be used in certain cases.
Consider the case when all the params to a template
function/class are similar. My questions is that whatever can be
acheived by a template in such a case, can be acheived by runtime
polymorphism....
| |
by: toton |
last post by:
Hi,
I have little confusion about static memory allocation & dynamic
allocation for a cluss member.
I have class like
class Bar{
public:
explicit Bar(){
cout<<"bar default"<<endl;
}
|
by: Ben Voigt |
last post by:
I have a POD type with a private destructor. There are a whole hierarchy of
derived POD types, all meant to be freed using a public member function
Destroy in the base class. I get warning C4624. I read the description,
decided that it's exactly what I want, and ignored the warning.
Now I'm trying to inherit using a template. Instead of "destructor could
not be generated because a base class destructor is inaccessible", I now
have an...
|
by: chameleon |
last post by:
I have 2 classes with exactly the same members (all static except
dtor/ctor).
Classes have different implementantion in only one static member
function and first class has one more member function.
How can I write this code with templates?
First of all: Thought to write code with templates is correct?
members of classes are static because refer to devices. There is no
reason to be non-static.
|
by: Zeppe |
last post by:
Hi all!
my problem is this one, I think that it could be a common one, maybe a
pattern, so if you can help me somehow it would be great. Let's suppose
I have a class Base
class Base
{
// impl.
};
|
by: marktang |
last post by:
ONU (Optical Network Unit) is one of the key components for providing high-speed Internet services. Its primary function is to act as an endpoint device located at the user's premises. However, people are often confused as to whether an ONU can Work As a Router. In this blog post, we’ll explore What is ONU, What Is Router, ONU & Router’s main usage, and What is the difference between ONU and Router. Let’s take a closer look !
Part I. Meaning of...
|
by: Oralloy |
last post by:
Hello folks,
I am unable to find appropriate documentation on the type promotion of bit-fields when using the generalised comparison operator "<=>".
The problem is that using the GNU compilers, it seems that the internal comparison operator "<=>" tries to promote arguments from unsigned to signed.
This is as boiled down as I can make it.
Here is my compilation command:
g++-12 -std=c++20 -Wnarrowing bit_field.cpp
Here is the code in...
| |
by: jinu1996 |
last post by:
In today's digital age, having a compelling online presence is paramount for businesses aiming to thrive in a competitive landscape. At the heart of this digital strategy lies an intricately woven tapestry of website design and digital marketing. It's not merely about having a website; it's about crafting an immersive digital experience that captivates audiences and drives business growth.
The Art of Business Website Design
Your website is...
|
by: tracyyun |
last post by:
Dear forum friends,
With the development of smart home technology, a variety of wireless communication protocols have appeared on the market, such as Zigbee, Z-Wave, Wi-Fi, Bluetooth, etc. Each protocol has its own unique characteristics and advantages, but as a user who is planning to build a smart home system, I am a bit confused by the choice of these technologies. I'm particularly interested in Zigbee because I've heard it does some...
|
by: agi2029 |
last post by:
Let's talk about the concept of autonomous AI software engineers and no-code agents. These AIs are designed to manage the entire lifecycle of a software development project—planning, coding, testing, and deployment—without human intervention. Imagine an AI that can take a project description, break it down, write the code, debug it, and then launch it, all on its own....
Now, this would greatly impact the work of software developers. The idea...
|
by: conductexam |
last post by:
I have .net C# application in which I am extracting data from word file and save it in database particularly. To store word all data as it is I am converting the whole word file firstly in HTML and then checking html paragraph one by one.
At the time of converting from word file to html my equations which are in the word document file was convert into image.
Globals.ThisAddIn.Application.ActiveDocument.Select();...
|
by: TSSRALBI |
last post by:
Hello
I'm a network technician in training and I need your help.
I am currently learning how to create and manage the different types of VPNs and I have a question about LAN-to-LAN VPNs.
The last exercise I practiced was to create a LAN-to-LAN VPN between two Pfsense firewalls, by using IPSEC protocols.
I succeeded, with both firewalls in the same network. But I'm wondering if it's possible to do the same thing, with 2 Pfsense firewalls...
|
by: adsilva |
last post by:
A Windows Forms form does not have the event Unload, like VB6. What one acts like?
| |
by: 6302768590 |
last post by:
Hai team
i want code for transfer the data from one system to another through IP address by using C# our system has to for every 5mins then we have to update the data what the data is updated we have to send another system
| |