Re: C++ 'extern inline' magic possible?

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 03/01/2011 04:52 PM, Jonathan Wakely wrote:
On 1 March 2011 12:14, Kevin P. Fleming wrote:

Yes, that was what my original post requested, but I now understand that any
solution that offered that would be non-compliant with the C++ standard. I
believe this code base is only using this technique to shave some compile
time for TUs that don't actually need the class definitions (they only
receive and send around pointers to the classes), but it's a cause of lower
performance and so I'll have to figure out whether removing the 'forward
declaration only' mechanism will be worth the effort.

There is another option, which I'm loathe to mention ...

<snip macro example which makes everyone shudder <G>>

Yes, I considered that. I did arrive at a potential solution, although I can't use it in this particular code base because of other complications, but...

== test.h ==
class Foo;

void opaqueBar(Foo*);

template <typename T>
void Bar(T* obj)
{
	opaqueBar(obj);
}

== test1.h ==
#include "test.h"

static void test1(Foo* obj)
{
	Bar(obj);
}

== test2.h ==
#include "test.h"

class Foo
{
public:
	void realBar();
};

template <>
inline void Bar<Foo>(Foo* obj)
{
	obj->realBar();
}

static void test2(Foo* obj)
{
	Bar(obj);
}

I think this still might be an ODR violation though, since there will end up being two definitions of Bar() for Foo.

--
Kevin P. Fleming
Digium, Inc. | Director of Software Technologies
445 Jan Davis Drive NW - Huntsville, AL 35806 - USA
skype: kpfleming | jabber: kfleming@xxxxxxxxxx
Check us out at www.digium.com & www.asterisk.org


[Index of Archives]     [Linux C Programming]     [Linux Kernel]     [eCos]     [Fedora Development]     [Fedora Announce]     [Autoconf]     [The DWARVES Debugging Tools]     [Yosemite Campsites]     [Yosemite News]     [Linux GCC]

  Powered by Linux