Whole Tomato Software Forums
Whole Tomato Software Forums
Main Site | Profile | Register | Active Topics | Members | Search | FAQ
 All Forums
 Visual Assist
 Technical Support
 namespaces

You must be registered to post a reply.
Click here to register.

Screensize:
UserName:
Password:
Format: BoldItalicizeUnderlineStrikethrough Align leftCenterAlign right Insert horizontal ruleUpload and insert imageInsert hyperlinkInsert email addressInsert codeInsert quoted textInsert listInsert Emoji
   
Message:

Forum code is on.
Html is off.

 
Check to subscribe to this topic.
   

T O P I C    R E V I E W
beylevem Posted - Aug 20 2007 : 10:40:07 AM
What is the target support for namespaces? Currently, I believe, the following causes problems

namespace ns {
class cls {
void Fn1();
void Fn2();
};
}

using namespace ns;

void ns::cls::Fn1() {}

void cls::Fn2() {}

VA doesn't understand that cls::Fn2() refers to ns::cls::Fn2()

In the dropdown for selecting functions, etc, the cls:: and ns::cls:: entries are grouped separately. Also, some of the refactoring things don't work, etc.

For those who are not macro averse, I have figured out yet another hack:

#ifdef FOOL_VA
#define BEGIN_NAMESPACE(x)
#define END_NAMESAPCE(x)
#else
#define BEGIN_NAMESPACE(x) namespace x {
#define END_NAMESPACE(x) }
#endif

BEGIN_NAMESPACE(ns)
class cls {
void Fn1();
void Fn2();
};
END_NAMESPACE(ns)
19   L A T E S T    R E P L I E S    (Newest First)
support Posted - Jun 03 2013 : 1:59:56 PM
case=5315 is fixed in build 1940
feline Posted - Oct 31 2007 : 4:45:33 PM
I have bumped the priority on this for you, hopefully this will help.
beylevem Posted - Oct 31 2007 : 12:42:53 PM
dang!

Well. I guess it's still itching there...

feline Posted - Oct 31 2007 : 12:06:04 PM
Good guess, it does, from the case it was this thread:

http://forum.wholetomato.com/forum/topic.asp?TOPIC_ID=5959

With a strangely familiar poster
beylevem Posted - Oct 30 2007 : 8:49:07 PM
Does the low number on the case number mean that the problem has been reported already?
feline Posted - Oct 30 2007 : 6:38:56 PM
I am seeing the same effect here. Thank you for the clear description.

case=5315
beylevem Posted - Oct 30 2007 : 3:33:53 PM
Another namespace issue:

file1.h:
namespace N1 {
class C1{};
}

class C2{};

file1.cpp:
using namespace N1;
void C1::newFn() {}
void C2::newFn() {}

One is offered refactoring options on C2::newFn, but not on C1::newFn.
feline Posted - Oct 17 2007 : 07:54:07 AM
The demo code has been very helpful, thank you It is always good to find out why things are not working correctly.

The using namespace statements make sense to me, but given what you want to achieve I would be tempted to either leave off the namespace (since you are always using it) or to place the namespace at the end of the class header file.
beylevem Posted - Oct 15 2007 : 1:23:36 PM
I am putting the namespace declaration in a header file for conciseness. I typically have

file1.h:
namespace N1 { class C1 { }; }

file2.h:
namespace N1 { class C2 { }; }

...

ns1.h:
#include file1.h
#include file2.h
...
using namespace N1;

I can then #include ns1.h anywhere I need to declare the classes, and use unqualified class names both for implementation and also in client code - e.g. C1* ptr = new C1();

Again, I understand the limitations of VAX parsing, and I'll be adding redundant "using namespace x;" statements in the cpp files - it's a small price to pay to get VAX to understand the code.

My response and demo code is because others may be experiencing similar symptoms/problems - I have seen a few threads complaining about goto not working as expected.

feline Posted - Oct 15 2007 : 12:58:50 PM
Why are you splitting the "using namespace" into a separate header file? To me this seems like an odd thing to do, and looks likely to confuse things.

Since VA seems to have problems with "using namespace Foo" in a header file, this is definitely likely to confuse things. There is the second question of how far VA should try to propagate this using statement. What if the using namespace is 5 header files away? 10 header files away?
beylevem Posted - Oct 14 2007 : 11:47:31 AM
I figured out why namespaces still don't work for me. I typically use one more header file:

file5.cpp:

#include "ns.h"

void N10::C10::fn1() { int x = 1; }

void C10::fn2() { int x = 2; }


ns.h:

#include "file5.h"

using namespace N10;


file5.h:

namespace N10 {
   class C10 {
      void fn1();
      void fn2();
      };
   }


This is a simplified example - normally more than one header file for the same namespace would be #included in ns.h

With this layout, VA does not connect the declaration and definition of fn2. The find symbol view shows two entries, and goto does not work.

feline Posted - Oct 10 2007 : 1:27:02 PM
formatting, if you mean this forum, then white space formatting is removed when the post is displayed. This is how HTML tends to work. If you are using the "reply to topic" link, so the full reply box, use the button with the "#" picture, which wraps the code in [ code ] [ /code ] tags, which preserve the formatting.

I am seeing the effect with the two different looking entries in the find symbol dialog:

case=9298
beylevem Posted - Oct 09 2007 : 12:53:54 PM
Alt+Shift+S - I don't know what it did to the formatting....
beylevem Posted - Oct 09 2007 : 12:52:28 PM
Yes, Alt+****+S (I normally use the toolbar button). With The code below, I bring up the view and use C10 as the filter/search string. I get

N10.C10 class C10{...}
N10.C10.fn1 void N10::C10::fn1(){...}
N10.C10.fn2 void fn2()

It's as if it finds the definition for fn1, but the declaration for fn2

file5.h:
namespace N10 {
class C10 {
void fn1();
void fn2();
};
}

file5.cpp:
#include "file5.h"

using namespace N10;

void N10::C10::fn1() { int x = 1; }

void C10::fn2() { int x = 2; }

feline Posted - Oct 09 2007 : 12:34:39 PM
What are you calling the "find symbol view"? Are you looking at the Find Symbol dialog - Alt-Shift-S ?

If so I am not seeing what you are posting.

For the other alt-g oddities, any help in pinning down when this happens would be much appreciated. With a test case to prod I can try and work out why it is failing, or put in a bug report if it is clearly broken.
beylevem Posted - Oct 08 2007 : 5:39:10 PM
If I separate the code into source and header files, the navigation works correctly. There is still one anomaly in the find symbol view:

N5.C5.fn1 void N5::C5::fn1() {...}
N5.C5.fn2 void fn2()

I still have cases where goto implementation only offers the header file entry, but there must be something else at work - I'll try and isolate it.
feline Posted - Oct 08 2007 : 2:44:01 PM
I am seeing the alt-g problem when all of the code is in the header file:

case=9251

If I place the code:

using namespace N5;

void N5::C5::fn1() {

}

void C5::fn2() {

}

into the matching cpp file alt-g works perfectly in both directions. Are you placing your implementations into the header file when you see this problem?

For the alt-m list, it is behaving as it is designed to, showing you the function names in the current file, as they are produced.

I see what you are saying about the list, but we also have people who want less information in the list. When you start using long namespace names and long class names this pushes the funtion names a long way across in the list, and the current behaviour offers you a way of cutting down the displayed information.
beylevem Posted - Oct 06 2007 : 12:57:50 PM
Support for namespaces may be improved, but some things still don't work:

namespace N5 {
class C5 {
void fn1();
void fn2();
};
}

using namespace N5;

void N5::C5::fn1() {

}

void C5::fn2() {

}

Position the cursor on fn1() in the class definition and click on go. VA goes to N5::C5::fn1(). Position the cursor on fn2() in the class definition, and click on go. VA goes nowhere.

Click the dropdown which lists the functions. It shows
C5.fn2()
N5
N5.C5
N5.C5.fn1()

I'd be happy with
N5
N5.C5
N5.C5.fn1()
N5.C5.fn2()

If you do find symbol on N5, you get
N5.C5.fn1 void N5::C5::fn1(){...}
N5.C5.fn2 void fn2()


if you search for C5, you get
C5.fn2 void C5::fn2(){...}
N5.C5.fn1 void N5::C5::fn1(){...}
N5.C5.fn2 void fn2()

feline Posted - Aug 20 2007 : 12:27:59 PM
In an ideal world the target is "if it compiles we support it". Unfortunately we are not quite there yet, but we do try to cover the main cases.

Using VS2005 and VA 1559 I have added this code to a test project. I added the namespace and class to the header file, and the using statement, along with the two function implementations to the matching cpp file.

alt-g is working for me, on both functions, moving me from the cpp to the header and back again. All without the user of any macro's.

"using namespace foo" handling was improved quite a lot a few builds ago, and should be fairly robust now.

© 2023 Whole Tomato Software, LLC Go To Top Of Page
Snitz Forums 2000